{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# How to transform data into factors"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Based on a conceptual understanding of key factor categories, their rationale and popular metrics, a key task is to identify new factors that may better capture the risks embodied by the return drivers laid out previously, or to find new ones. \n",
    "\n",
    "In either case, it will be important to compare the performance of innovative factors to that of known factors to identify incremental signal gains."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We create the dataset here and store it in our [data](../../data) folder to facilitate reuse in later chapters."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Imports & Settings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:30:00.793416Z",
     "start_time": "2020-06-19T13:30:00.791261Z"
    }
   },
   "outputs": [],
   "source": [
    "import warnings\n",
    "warnings.filterwarnings('ignore')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:30:01.688618Z",
     "start_time": "2020-06-19T13:30:00.795253Z"
    }
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import pandas_datareader.data as web\n",
    "\n",
    "from pyfinance.ols import PandasRollingOLS\n",
    "from talib import RSI, BBANDS, MACD, NATR, ATR\n",
    "\n",
    "from sklearn.feature_selection import mutual_info_classif, mutual_info_regression\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:30:01.691446Z",
     "start_time": "2020-06-19T13:30:01.689643Z"
    }
   },
   "outputs": [],
   "source": [
    "sns.set_style('whitegrid')\n",
    "idx = pd.IndexSlice"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Load US equity OHLCV data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The `assets.h5` store can be generated using the the notebook [create_datasets](../../data/create_datasets.ipynb) in the [data](../../data) directory in the root directory of this repo for instruction to download the following dataset."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We load the Quandl stock price datasets covering the US equity markets 2000-18 using `pd.IndexSlice` to perform a slice operation on the `pd.MultiIndex`, select the adjusted close price and unpivot the column to convert the DataFrame to wide format with tickers in the columns and timestamps in the rows:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Set data store location:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:30:01.700409Z",
     "start_time": "2020-06-19T13:30:01.692340Z"
    }
   },
   "outputs": [],
   "source": [
    "DATA_STORE = '../data/assets.h5'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:30:01.708577Z",
     "start_time": "2020-06-19T13:30:01.701482Z"
    }
   },
   "outputs": [],
   "source": [
    "YEAR = 12"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:30:01.716660Z",
     "start_time": "2020-06-19T13:30:01.709622Z"
    }
   },
   "outputs": [],
   "source": [
    "START = 1995\n",
    "END = 2017"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:30:06.323045Z",
     "start_time": "2020-06-19T13:30:01.717987Z"
    }
   },
   "outputs": [],
   "source": [
    "with pd.HDFStore(DATA_STORE) as store:\n",
    "    prices = (store['quandl/wiki/prices']\n",
    "              .loc[idx[str(START):str(END), :], :]\n",
    "              .filter(like='adj_')\n",
    "              .dropna()\n",
    "              .swaplevel()\n",
    "              .rename(columns=lambda x: x.replace('adj_', ''))\n",
    "              .join(store['us_equities/stocks']\n",
    "                    .loc[:, ['sector']])\n",
    "              .dropna())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:30:06.750216Z",
     "start_time": "2020-06-19T13:30:06.324129Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "MultiIndex: 10241831 entries, ('AAN', Timestamp('1995-01-03 00:00:00')) to ('ZUMZ', Timestamp('2017-12-29 00:00:00'))\n",
      "Data columns (total 6 columns):\n",
      " #   Column  Non-Null Count     Dtype  \n",
      "---  ------  --------------     -----  \n",
      " 0   open    10241831 non-null  float64\n",
      " 1   high    10241831 non-null  float64\n",
      " 2   low     10241831 non-null  float64\n",
      " 3   close   10241831 non-null  float64\n",
      " 4   volume  10241831 non-null  float64\n",
      " 5   sector  10241831 non-null  object \n",
      "dtypes: float64(5), object(1)\n",
      "memory usage: 508.0+ MB\n"
     ]
    }
   ],
   "source": [
    "prices.info(null_counts=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:30:06.805279Z",
     "start_time": "2020-06-19T13:30:06.751147Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2369"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(prices.index.unique('ticker'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Remove stocks with less than ten years of data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:30:41.146283Z",
     "start_time": "2020-06-19T13:30:06.806189Z"
    }
   },
   "outputs": [],
   "source": [
    "min_obs = 10 * 252\n",
    "nobs = prices.groupby(level='ticker').size()\n",
    "to_drop = nobs[nobs < min_obs].index\n",
    "prices = prices.drop(to_drop, level='ticker')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:30:41.562112Z",
     "start_time": "2020-06-19T13:30:41.147171Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "MultiIndex: 9532628 entries, ('AAN', Timestamp('1995-01-03 00:00:00')) to ('ZUMZ', Timestamp('2017-12-29 00:00:00'))\n",
      "Data columns (total 6 columns):\n",
      " #   Column  Non-Null Count    Dtype  \n",
      "---  ------  --------------    -----  \n",
      " 0   open    9532628 non-null  float64\n",
      " 1   high    9532628 non-null  float64\n",
      " 2   low     9532628 non-null  float64\n",
      " 3   close   9532628 non-null  float64\n",
      " 4   volume  9532628 non-null  float64\n",
      " 5   sector  9532628 non-null  object \n",
      "dtypes: float64(5), object(1)\n",
      "memory usage: 472.9+ MB\n"
     ]
    }
   ],
   "source": [
    "prices.info(null_counts=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:30:41.633624Z",
     "start_time": "2020-06-19T13:30:41.563423Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1883"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(prices.index.unique('ticker'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Add some Basic Factors"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Compute the Relative Strength Index"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:30:52.470184Z",
     "start_time": "2020-06-19T13:30:41.634583Z"
    }
   },
   "outputs": [],
   "source": [
    "prices['rsi'] = prices.groupby(level='ticker').close.apply(RSI)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:30:55.642753Z",
     "start_time": "2020-06-19T13:30:52.471071Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.distplot(prices.rsi);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Compute Bollinger Bands"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:30:55.646276Z",
     "start_time": "2020-06-19T13:30:55.643662Z"
    }
   },
   "outputs": [],
   "source": [
    "def compute_bb(close):\n",
    "    high, mid, low = BBANDS(np.log1p(close), timeperiod=20)\n",
    "    return pd.DataFrame({'bb_high': high,\n",
    "                         'bb_mid': mid,\n",
    "                         'bb_low': low}, index=close.index)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:31:07.243860Z",
     "start_time": "2020-06-19T13:30:55.647616Z"
    }
   },
   "outputs": [],
   "source": [
    "prices = (prices.join(prices\n",
    "                      .groupby(level='ticker')\n",
    "                      .close\n",
    "                      .apply(compute_bb)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:31:07.813355Z",
     "start_time": "2020-06-19T13:31:07.244774Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "MultiIndex: 9532628 entries, ('AAN', Timestamp('1995-01-03 00:00:00')) to ('ZUMZ', Timestamp('2017-12-29 00:00:00'))\n",
      "Data columns (total 10 columns):\n",
      " #   Column   Non-Null Count    Dtype  \n",
      "---  ------   --------------    -----  \n",
      " 0   open     9532628 non-null  float64\n",
      " 1   high     9532628 non-null  float64\n",
      " 2   low      9532628 non-null  float64\n",
      " 3   close    9532628 non-null  float64\n",
      " 4   volume   9532628 non-null  float64\n",
      " 5   sector   9532628 non-null  object \n",
      " 6   rsi      9506266 non-null  float64\n",
      " 7   bb_high  9496851 non-null  float64\n",
      " 8   bb_mid   9496851 non-null  float64\n",
      " 9   bb_low   9496851 non-null  float64\n",
      "dtypes: float64(9), object(1)\n",
      "memory usage: 1.1+ GB\n"
     ]
    }
   ],
   "source": [
    "prices.info(null_counts=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:31:08.961375Z",
     "start_time": "2020-06-19T13:31:07.814282Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bb_high</th>\n",
       "      <th>bb_mid</th>\n",
       "      <th>bb_low</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>9.496851e+06</td>\n",
       "      <td>9.496851e+06</td>\n",
       "      <td>9.496851e+06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>2.954140e+00</td>\n",
       "      <td>2.881157e+00</td>\n",
       "      <td>2.808174e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>1.024536e+00</td>\n",
       "      <td>1.026901e+00</td>\n",
       "      <td>1.032999e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>8.933146e-03</td>\n",
       "      <td>8.933146e-03</td>\n",
       "      <td>-1.568426e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>2.303724e+00</td>\n",
       "      <td>2.226078e+00</td>\n",
       "      <td>2.146471e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>2.940911e+00</td>\n",
       "      <td>2.868116e+00</td>\n",
       "      <td>2.796484e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>3.555602e+00</td>\n",
       "      <td>3.487039e+00</td>\n",
       "      <td>3.420498e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>1.376991e+01</td>\n",
       "      <td>1.358056e+01</td>\n",
       "      <td>1.346225e+01</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            bb_high        bb_mid        bb_low\n",
       "count  9.496851e+06  9.496851e+06  9.496851e+06\n",
       "mean   2.954140e+00  2.881157e+00  2.808174e+00\n",
       "std    1.024536e+00  1.026901e+00  1.032999e+00\n",
       "min    8.933146e-03  8.933146e-03 -1.568426e+00\n",
       "25%    2.303724e+00  2.226078e+00  2.146471e+00\n",
       "50%    2.940911e+00  2.868116e+00  2.796484e+00\n",
       "75%    3.555602e+00  3.487039e+00  3.420498e+00\n",
       "max    1.376991e+01  1.358056e+01  1.346225e+01"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prices.filter(like='bb_').describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:31:18.504726Z",
     "start_time": "2020-06-19T13:31:08.962582Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x288 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axes = plt.subplots(ncols=3, figsize=(15,4))\n",
    "for i, col in enumerate(['bb_low', 'bb_mid', 'bb_low']):\n",
    "    sns.distplot(prices[col], ax=axes[i])\n",
    "    axes[i].set_title(col);\n",
    "fig.tight_layout();"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:31:18.806350Z",
     "start_time": "2020-06-19T13:31:18.505878Z"
    }
   },
   "outputs": [],
   "source": [
    "prices['bb_up'] = prices.bb_high.sub(np.log1p(prices.close))\n",
    "prices['bb_down'] = np.log1p(prices.close).sub(prices.bb_low)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:31:21.494970Z",
     "start_time": "2020-06-19T13:31:18.808865Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axes = plt.subplots(ncols=2, figsize=(10,4))\n",
    "for i, col in enumerate(['bb_down', 'bb_up']):\n",
    "    sns.boxenplot(prices[col], ax=axes[i])\n",
    "    axes[i].set_title(col);\n",
    "fig.tight_layout();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Compute Average True Range"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Helper for indicators with multiple inputs:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:31:21.941026Z",
     "start_time": "2020-06-19T13:31:21.497351Z"
    }
   },
   "outputs": [],
   "source": [
    "by_ticker = prices.groupby('ticker', group_keys=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:31:21.944082Z",
     "start_time": "2020-06-19T13:31:21.941871Z"
    }
   },
   "outputs": [],
   "source": [
    "def compute_atr(stock_data):\n",
    "    atr = ATR(stock_data.high, \n",
    "              stock_data.low, \n",
    "              stock_data.close, \n",
    "              timeperiod=14)\n",
    "    return atr.sub(atr.mean()).div(atr.std())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:31:34.815773Z",
     "start_time": "2020-06-19T13:31:21.945257Z"
    }
   },
   "outputs": [],
   "source": [
    "prices['atr'] = by_ticker.apply(compute_atr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:31:37.930409Z",
     "start_time": "2020-06-19T13:31:34.816699Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.distplot(prices.atr);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:31:50.373966Z",
     "start_time": "2020-06-19T13:31:37.931543Z"
    }
   },
   "outputs": [],
   "source": [
    "prices['natr'] = by_ticker.apply(lambda x: NATR(high=x.high, low=x.low, close=x.close))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:31:53.452178Z",
     "start_time": "2020-06-19T13:31:50.375046Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.distplot(prices.natr[prices.natr<10]);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Compute Moving Average Convergence/Divergence"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:03.999625Z",
     "start_time": "2020-06-19T13:31:53.453379Z"
    },
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "def compute_macd(close):\n",
    "    macd = MACD(close)[0]\n",
    "    return macd.sub(macd.mean()).div(macd.std())\n",
    "\n",
    "prices['macd'] = prices.groupby(level='ticker').close.apply(compute_macd)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:07.164606Z",
     "start_time": "2020-06-19T13:32:04.000697Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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p36aAUo3XfB4Tt14SZaLodDwc/4kDXKXywWfr/9LYBgGVFU95Tqfz5cQ7KdSVlaWbJdERDQGSe+0KC8vR2NjIwDA7XajpKQkvq64uBhtbW3o6uqCpmn48MMPsWTJksmrloiIhpDMJGO9YqNW9u7dC9M0UVtbi127dsHv96Oqqio+asU0TSxbtgwrVqyYqtqJiAijCHIiIkpvnP2QiMjiGORERBbHICcisjjr3E53Gv70pz/h9ddfx09+8hMAwLZt2/DjH/8YBQXRgfnf/OY3cfHFF6eyRABD63S73XjkkUegKAouu+wy3HfffSmusJ9pmrj88stx1llnAYgOK129enVqixog2dQS6ebGG2+MD90988wz8eijj6a4okQfffQRHn/8cWzatAltbW34/ve/D0mSsHDhQvzgBz+ALKdHm3Bgna2trbj33nvj5+jy5ctx7bXXprZARO+If+ihh3D48GFomoZvfOMbOOecc07vmJqCe/jhh82rr77a/Pa3vx1f9tOf/tR8/fXXU1jVUKeq84YbbjDb2tpMwzDMr33ta2ZLS0sKK0z06aefmvfcc0+qyxjWG2+8YX7ve98zTdM0t2/fbt57770prmh4wWDQ/MpXvpLqMob1zDPPmNdff715yy23mKZpmvfcc4/5/vvvm6ZpmmvXrjW3bduWyvLiBtf54osvms8++2yKqxpqy5Yt5oYNG0zTNM2TJ0+aS5cuPe1jmh7/NzqJysvLsX79+oRlra2tePnll3Hbbbehrq4Ouq6nprgBBtfp9XqhaRoKCwshSRIuu+wyvPfee6krcJDW1lYcPXoUK1euxNe//nXs27cv1SUlGGlqiXSze/duBAIB3HnnnVi1ahXcbneqS0pQWFiIJ554Iv66tbU1/hfs5ZdfjnfffTdVpSUYXGdLSwvefvttrFixAg899FDSu86nyj/90z/hX//1X+OvFUU57WMqTJC/9NJLuP766xP+27FjB6699tohE9VceumlWLt2LV544QX4/X5s3rw57eocPDVCVlYWent7p6zOgU5Vc35+Pu6++25s2rQJ99xzD9asWZOS2oYz3NQS6SgjIwN33XUXnn32Wfzwhz/Ed7/73bSq9eqrr47fzQ0kTv6UyvNysMF1fv7zn8cDDzyAF154AfPnz8dTTz2Vwur6ZWVlweVywev14lvf+ha+/e1vn/YxFaaP/JZbbsEtt9wyqvcuW7YMOTnRCTKuuuoqvPHGG5NZWoLR1nmq6Q9iNU+1U9UcCASgKNHZGi+66CIcPXp0Umd3G6uRppZIN2effTaKioogSRLOPvts5Obm4tixY/FrOOlmYN9tKs/LZCorK+O1VVZW4uGHH05xRf3a29vxL//yL7jtttvw5S9/GY899lh83XiOqTAt8tEyTRM33HADOjqis9C99957OP/881Nc1VAulws2mw0HDhyAaZr4y1/+gosuuijVZcU9+eSTeP755wFEuwbmzp2bNiEOjDy1RLrZsmUL6urqAABHjx6F1+ud9KmgT8d5552HDz74AADQ2NiYVuflQHfddRd27NgBIL2+58ePH8edd96JNWvW4OabbwZw+sc0PZsok0iSJGzYsAH33XcfMjIyUFxcnLYPw4j9mR2JRHDZZZfhggsuSHVJcXfffTfWrFmDd955B4qipN0oi8rKSjQ1NaG6ujo+tUS6uvnmm/Hggw9i+fLlkCQJtbW1afvXAwB873vfw9q1a/HTn/4UCxYswNVXX53qkk5p/fr1ePjhh2Gz2ZCfn582LfJf/OIX6OnpwdNPP42nn34aAPBv//Zv2LBhw7iPKW/RJyKyuGnXtUJEJBoGORGRxTHIiYgsjkFORGRxDHIiIotjkBONUSgUwhe/+MVUl0EUxyAnIrK49L3rgGgC/OY3v8Fbb72FYDCIY8eOYdWqVXjzzTfx8ccf44EHHkBHRwe2bdsGXdeRnZ2NJ554AoZh4MEHH8SRI0cQDoexdu1alJSU4Lvf/S56enpQWFiY6n8WUQIGOQnP5/PhP//zP/GHP/wBzz33HF588UV88MEHeO6557B48WI899xzkGUZd911F3bu3ImdO3di3rx5+NnPfoa9e/fi3XffRWtrK0pKSvCd73wHH330Ufx2aqJ0wCAn4ZWWlgIAsrOzUVxcDEmSMGPGDITDYdhsNtx///1wOp3o6OiAruvYt28fLr/8cgBASUkJSkpK8IMf/CA+Le4FF1yQ1rfQ0/TDPnIS3nCTeYXDYTQ0NODnP/851q5dC8MwYJomiouLsXPnTgDAwYMHsXr1aixYsCA+T/iuXbvSappZIjYraNpSVRWZmZn46le/CrvdjtmzZ+Ozzz5DdXU1HnroIdx+++2IRCJ46KGHUFpaGp/YasGCBbDZbKkunyiOk2YREVkcu1aIiCyOQU5EZHEMciIii2OQExFZHIOciMjiGORERBbHICcisrj/D7pqKIz9JXZEAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.distplot(prices.macd);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Compute dollar volume to determine universe"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:07.246498Z",
     "start_time": "2020-06-19T13:32:07.165610Z"
    }
   },
   "outputs": [],
   "source": [
    "prices['dollar_volume'] = (prices.loc[:, 'close']\n",
    "                           .mul(prices.loc[:, 'volume'], axis=0))\n",
    "\n",
    "prices.dollar_volume /= 1e6"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:08.723777Z",
     "start_time": "2020-06-19T13:32:07.247380Z"
    }
   },
   "outputs": [],
   "source": [
    "prices.to_hdf('data.h5', 'us/equities/prices')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:10.679075Z",
     "start_time": "2020-06-19T13:32:08.724691Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "MultiIndex: 9532628 entries, ('AAN', Timestamp('1995-01-03 00:00:00')) to ('ZUMZ', Timestamp('2017-12-29 00:00:00'))\n",
      "Data columns (total 16 columns):\n",
      " #   Column         Non-Null Count    Dtype  \n",
      "---  ------         --------------    -----  \n",
      " 0   open           9532628 non-null  float64\n",
      " 1   high           9532628 non-null  float64\n",
      " 2   low            9532628 non-null  float64\n",
      " 3   close          9532628 non-null  float64\n",
      " 4   volume         9532628 non-null  float64\n",
      " 5   sector         9532628 non-null  object \n",
      " 6   rsi            9506266 non-null  float64\n",
      " 7   bb_high        9496851 non-null  float64\n",
      " 8   bb_mid         9496851 non-null  float64\n",
      " 9   bb_low         9496851 non-null  float64\n",
      " 10  bb_up          9496851 non-null  float64\n",
      " 11  bb_down        9496851 non-null  float64\n",
      " 12  atr            9506266 non-null  float64\n",
      " 13  natr           9506266 non-null  float64\n",
      " 14  macd           9470489 non-null  float64\n",
      " 15  dollar_volume  9532628 non-null  float64\n",
      "dtypes: float64(15), object(1)\n",
      "memory usage: 1.2+ GB\n"
     ]
    }
   ],
   "source": [
    "prices = pd.read_hdf('data.h5', 'us/equities/prices')\n",
    "prices.info(null_counts=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Resample OHLCV prices to monthly frequency"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To reduce training time and experiment with strategies for longer time horizons, we convert the business-daily data to month-end frequency using the available adjusted close price:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:10.683087Z",
     "start_time": "2020-06-19T13:32:10.680778Z"
    }
   },
   "outputs": [],
   "source": [
    "last_cols = [c for c in prices.columns.unique(0) if c not in ['dollar_volume', 'volume',\n",
    "                                                              'open', 'high', 'low']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:16.993082Z",
     "start_time": "2020-06-19T13:32:10.684187Z"
    }
   },
   "outputs": [],
   "source": [
    "prices = prices.unstack('ticker')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:23.183307Z",
     "start_time": "2020-06-19T13:32:16.994114Z"
    }
   },
   "outputs": [],
   "source": [
    "data = (pd.concat([prices.dollar_volume.resample('M').mean().stack('ticker').to_frame('dollar_volume'),\n",
    "                   prices[last_cols].resample('M').last().stack('ticker')],\n",
    "                  axis=1)\n",
    "        .swaplevel()\n",
    "        .dropna())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:23.218063Z",
     "start_time": "2020-06-19T13:32:23.184283Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "MultiIndex: 452529 entries, ('AAN', Timestamp('1995-02-28 00:00:00')) to ('ZUMZ', Timestamp('2017-12-31 00:00:00'))\n",
      "Data columns (total 12 columns):\n",
      " #   Column         Non-Null Count   Dtype  \n",
      "---  ------         --------------   -----  \n",
      " 0   dollar_volume  452529 non-null  float64\n",
      " 1   atr            452529 non-null  float64\n",
      " 2   bb_down        452529 non-null  float64\n",
      " 3   bb_high        452529 non-null  float64\n",
      " 4   bb_low         452529 non-null  float64\n",
      " 5   bb_mid         452529 non-null  float64\n",
      " 6   bb_up          452529 non-null  float64\n",
      " 7   close          452529 non-null  float64\n",
      " 8   macd           452529 non-null  float64\n",
      " 9   natr           452529 non-null  float64\n",
      " 10  rsi            452529 non-null  float64\n",
      " 11  sector         452529 non-null  object \n",
      "dtypes: float64(11), object(1)\n",
      "memory usage: 43.2+ MB\n"
     ]
    }
   ],
   "source": [
    "data.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Select 500 most-traded equities"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Select the 500 most-traded stocks based on a 5-year rolling average of dollar volume."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:26.513249Z",
     "start_time": "2020-06-19T13:32:23.219698Z"
    }
   },
   "outputs": [],
   "source": [
    "data['dollar_volume'] = (data\n",
    "                         .groupby('ticker',\n",
    "                                  group_keys=False,\n",
    "                                  as_index=False)\n",
    "                         .dollar_volume\n",
    "                         .rolling(window=5*12)\n",
    "                         .mean()\n",
    "                         .fillna(0)\n",
    "                         .reset_index(level=0, drop=True))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:26.641693Z",
     "start_time": "2020-06-19T13:32:26.514194Z"
    }
   },
   "outputs": [],
   "source": [
    "data['dollar_vol_rank'] = (data\n",
    "                           .groupby('date')\n",
    "                           .dollar_volume\n",
    "                           .rank(ascending=False))\n",
    "\n",
    "data = data[data.dollar_vol_rank < 500].drop(['dollar_volume', 'dollar_vol_rank'], axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:26.665270Z",
     "start_time": "2020-06-19T13:32:26.642734Z"
    },
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "MultiIndex: 107784 entries, ('AAPL', Timestamp('2000-01-31 00:00:00')) to ('ZION', Timestamp('2017-12-31 00:00:00'))\n",
      "Data columns (total 11 columns):\n",
      " #   Column   Non-Null Count   Dtype  \n",
      "---  ------   --------------   -----  \n",
      " 0   atr      107784 non-null  float64\n",
      " 1   bb_down  107784 non-null  float64\n",
      " 2   bb_high  107784 non-null  float64\n",
      " 3   bb_low   107784 non-null  float64\n",
      " 4   bb_mid   107784 non-null  float64\n",
      " 5   bb_up    107784 non-null  float64\n",
      " 6   close    107784 non-null  float64\n",
      " 7   macd     107784 non-null  float64\n",
      " 8   natr     107784 non-null  float64\n",
      " 9   rsi      107784 non-null  float64\n",
      " 10  sector   107784 non-null  object \n",
      "dtypes: float64(10), object(1)\n",
      "memory usage: 9.5+ MB\n"
     ]
    }
   ],
   "source": [
    "data.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Create monthly return series"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To capture time series dynamics that reflect, for example, momentum patterns, we compute historical returns using the method `.pct_change(n_periods)`, that is, returns over various monthly periods as identified by lags.\n",
    "\n",
    "We then convert the wide result back to long format with the `.stack()` method, use `.pipe()` to apply the `.clip()` method to the resulting `DataFrame`, and winsorize returns at the [1%, 99%] levels; that is, we cap outliers at these percentiles.\n",
    "\n",
    "Finally, we normalize returns using the geometric average. After using `.swaplevel()` to change the order of the `MultiIndex` levels, we obtain compounded monthly returns for six periods ranging from 1 to 12 months:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:26.682644Z",
     "start_time": "2020-06-19T13:32:26.678247Z"
    }
   },
   "outputs": [],
   "source": [
    "outlier_cutoff = 0.01\n",
    "lags = [1, 3, 6, 12]\n",
    "returns = []"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:30.075537Z",
     "start_time": "2020-06-19T13:32:26.684285Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "MultiIndex: 154206 entries, ('AAPL', Timestamp('2000-02-29 00:00:00')) to ('ZIXI', Timestamp('2017-12-31 00:00:00'))\n",
      "Data columns (total 4 columns):\n",
      " #   Column      Non-Null Count   Dtype  \n",
      "---  ------      --------------   -----  \n",
      " 0   return_1m   154206 non-null  float64\n",
      " 1   return_3m   152522 non-null  float64\n",
      " 2   return_6m   150006 non-null  float64\n",
      " 3   return_12m  145000 non-null  float64\n",
      "dtypes: float64(4)\n",
      "memory usage: 5.3+ MB\n"
     ]
    }
   ],
   "source": [
    "for lag in lags:\n",
    "    returns.append(data\n",
    "                   .close\n",
    "                   .unstack('ticker')\n",
    "                   .sort_index()\n",
    "                   .pct_change(lag)\n",
    "                   .stack('ticker')\n",
    "                   .pipe(lambda x: x.clip(lower=x.quantile(outlier_cutoff),\n",
    "                                          upper=x.quantile(1-outlier_cutoff)))\n",
    "                   .add(1)\n",
    "                   .pow(1/lag)\n",
    "                   .sub(1)\n",
    "                   .to_frame(f'return_{lag}m')\n",
    "                   )\n",
    "    \n",
    "returns = pd.concat(returns, axis=1).swaplevel()\n",
    "returns.info(null_counts=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:30.115742Z",
     "start_time": "2020-06-19T13:32:30.076409Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>return_1m</th>\n",
       "      <th>return_3m</th>\n",
       "      <th>return_6m</th>\n",
       "      <th>return_12m</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>154206.000000</td>\n",
       "      <td>152522.000000</td>\n",
       "      <td>150006.000000</td>\n",
       "      <td>145000.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>0.007069</td>\n",
       "      <td>0.004762</td>\n",
       "      <td>0.004129</td>\n",
       "      <td>0.003821</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.083222</td>\n",
       "      <td>0.048868</td>\n",
       "      <td>0.035565</td>\n",
       "      <td>0.025336</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-0.264615</td>\n",
       "      <td>-0.173225</td>\n",
       "      <td>-0.130623</td>\n",
       "      <td>-0.089656</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>-0.016393</td>\n",
       "      <td>-0.006011</td>\n",
       "      <td>-0.002583</td>\n",
       "      <td>-0.000429</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>0.037313</td>\n",
       "      <td>0.025775</td>\n",
       "      <td>0.020045</td>\n",
       "      <td>0.015872</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>0.304386</td>\n",
       "      <td>0.160774</td>\n",
       "      <td>0.113208</td>\n",
       "      <td>0.081740</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           return_1m      return_3m      return_6m     return_12m\n",
       "count  154206.000000  152522.000000  150006.000000  145000.000000\n",
       "mean        0.007069       0.004762       0.004129       0.003821\n",
       "std         0.083222       0.048868       0.035565       0.025336\n",
       "min        -0.264615      -0.173225      -0.130623      -0.089656\n",
       "25%        -0.016393      -0.006011      -0.002583      -0.000429\n",
       "50%         0.000000       0.000000       0.000000       0.000000\n",
       "75%         0.037313       0.025775       0.020045       0.015872\n",
       "max         0.304386       0.160774       0.113208       0.081740"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "returns.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:30.625896Z",
     "start_time": "2020-06-19T13:32:30.117019Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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x+c9nBkXfCUpl3PC3/5dHrr71+lo35BDj5mw5U9ATVu49PmM3HVwphz1nqSU3DRnft65x9A0NTTkwcVLctMD83P8e96VlJIlL7yYtj/uV2bLxowZk/b29h4FcqlcfnMbV2bMmFG1q7jV/Hezqe3pCjI998VZP672CPRif/fho6o9Ar3cY0ufr/YI9HJfnvSBLT7niiuuyL/9279ll112SblcTqlUyq233rrZNa4gAwBQs37605/m1ltvzYABA97wGoEMAEDN2n333dO3b197kAEAIEmeffbZTJgwISNGjEjy8u3zfvjDH252jUAGAKBmff3rX+/xGm8UAgBAzVmxYkUuvvji/OhHP0q/fv0yfPjwDB8+PNddd90W1wpkAABqzpe+9KWMHDkyu+66a04++eQsWfLyvaPvvffeLa61xQIAgJrT0dFReRORMWPG5IwzzsiVV16ZN3KHY1eQAQCoOV1dXVm4cGGSZOzYsZk2bVpOP/30rFmzZgsrBTIAADXonHPOyYUXXpjly5cnSSZOnJiPf/zjWbp06RbXCmQAAGrOmDFjcuWVV2aXXXapPHb88cfnN7/5zRbXCmQAALYbdXVbzl8v0gMAoOaccsop6ezs3OSxcrnsjUIAANg+feELX8g555yTb33rW6mvr+/RWoEMAEDNOfDAA3P88cdn4cKFmTBhQo/WCmQAAGrSaaed9rrnOjo60tTU9JrnvEgPAIDtzubiWSADALDd2dw76glkAAC2O6VS6XXPCWQAACgQyAAAbHdssQAAgIJRo0a97jm3eQMAoGYtWLAgra2taW9vrzw2ffr0nHfeea+7RiADAFCzzjrrrJx88skZNmzYG14jkAEAqFm77LJLJk+e3KM1AhkAgJo1fPjwXH755RkzZkzl1m5HHnnkZtcIZAAAalZnZ2cWLVqURYsWVR4TyAAAbLcGDBiQs88+u0dr3OYNAICa1dbWltWrV/dojSvIAADUrLa2towbNy6DBw+u7EG+8847N7tGIAMAULNmz57d4zUCGQCAmvVa+4+nT5++2TUCGQCAmjVx4sQkSblczvz58/P8889vcY1ABgCgZo0fP77y8VFHHZVTTz11i2sEMgAANav4grxly5Zl+fLlW1wjkAEAqFk33XRT5eOmpqYt7j9OBDIAADVs7NixmTx5cuV41qxZ2X///Te7RiADAFBzbrzx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\n",
      "text/plain": [
       "<Figure size 720x720 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cmap = sns.diverging_palette(10, 220, as_cmap=True)\n",
    "sns.clustermap(returns.corr('spearman'), annot=True, center=0, cmap=cmap);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:30.927986Z",
     "start_time": "2020-06-19T13:32:30.627078Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "MultiIndex: 98127 entries, ('AAPL', Timestamp('2001-01-31 00:00:00')) to ('ZION', Timestamp('2017-12-31 00:00:00'))\n",
      "Data columns (total 14 columns):\n",
      " #   Column      Non-Null Count  Dtype  \n",
      "---  ------      --------------  -----  \n",
      " 0   atr         98127 non-null  float64\n",
      " 1   bb_down     98127 non-null  float64\n",
      " 2   bb_high     98127 non-null  float64\n",
      " 3   bb_low      98127 non-null  float64\n",
      " 4   bb_mid      98127 non-null  float64\n",
      " 5   bb_up       98127 non-null  float64\n",
      " 6   macd        98127 non-null  float64\n",
      " 7   natr        98127 non-null  float64\n",
      " 8   rsi         98127 non-null  float64\n",
      " 9   sector      98127 non-null  object \n",
      " 10  return_1m   98127 non-null  float64\n",
      " 11  return_3m   98127 non-null  float64\n",
      " 12  return_6m   98127 non-null  float64\n",
      " 13  return_12m  98127 non-null  float64\n",
      "dtypes: float64(13), object(1)\n",
      "memory usage: 10.9+ MB\n"
     ]
    }
   ],
   "source": [
    "data = data.join(returns).drop('close', axis=1).dropna()\n",
    "data.info(null_counts=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:31.164785Z",
     "start_time": "2020-06-19T13:32:30.929368Z"
    }
   },
   "outputs": [],
   "source": [
    "min_obs = 5*12\n",
    "nobs = data.groupby(level='ticker').size()\n",
    "to_drop = nobs[nobs < min_obs].index\n",
    "data = data.drop(to_drop, level='ticker')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:31.168469Z",
     "start_time": "2020-06-19T13:32:31.165660Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "578"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(data.index.unique('ticker'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We are left with 787 tickers."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Rolling Factor Betas"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We will introduce the Fama—French data to estimate the exposure of assets to common risk factors using linear regression in [Chapter 8, Time Series Models]([](../../08_time_series_models))."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The five Fama—French factors, namely market risk, size, value, operating profitability, and investment have been shown empirically to explain asset returns and are commonly used to assess the risk/return profile of portfolios. Hence, it is natural to include past factor exposures as financial features in models that aim to predict future returns."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can access the historical factor returns using the `pandas-datareader` and estimate historical exposures using the `PandasRollingOLS` rolling linear regression functionality in the `pyfinance` library as follows:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Use Fama-French research factors to estimate the factor exposures of the stock in the dataset to the 5 factors market risk, size, value, operating profitability and investment."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:31.281317Z",
     "start_time": "2020-06-19T13:32:31.169346Z"
    },
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "DatetimeIndex: 304 entries, 1995-01-31 to 2020-04-30\n",
      "Freq: M\n",
      "Data columns (total 5 columns):\n",
      " #   Column  Non-Null Count  Dtype  \n",
      "---  ------  --------------  -----  \n",
      " 0   Mkt-RF  304 non-null    float64\n",
      " 1   SMB     304 non-null    float64\n",
      " 2   HML     304 non-null    float64\n",
      " 3   RMW     304 non-null    float64\n",
      " 4   CMA     304 non-null    float64\n",
      "dtypes: float64(5)\n",
      "memory usage: 14.2 KB\n"
     ]
    }
   ],
   "source": [
    "factors = ['Mkt-RF', 'SMB', 'HML', 'RMW', 'CMA']\n",
    "factor_data = web.DataReader('F-F_Research_Data_5_Factors_2x3', \n",
    "                             'famafrench', \n",
    "                             start=START)[0].drop('RF', axis=1)\n",
    "factor_data.index = factor_data.index.to_timestamp()\n",
    "factor_data = factor_data.resample('M').last().div(100)\n",
    "factor_data.index.name = 'date'\n",
    "factor_data.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:31.314955Z",
     "start_time": "2020-06-19T13:32:31.282424Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "MultiIndex: 92011 entries, ('A', Timestamp('2005-12-31 00:00:00', freq='M')) to ('ZION', Timestamp('2017-12-31 00:00:00', freq='M'))\n",
      "Data columns (total 6 columns):\n",
      " #   Column     Non-Null Count  Dtype  \n",
      "---  ------     --------------  -----  \n",
      " 0   Mkt-RF     92011 non-null  float64\n",
      " 1   SMB        92011 non-null  float64\n",
      " 2   HML        92011 non-null  float64\n",
      " 3   RMW        92011 non-null  float64\n",
      " 4   CMA        92011 non-null  float64\n",
      " 5   return_1m  92011 non-null  float64\n",
      "dtypes: float64(6)\n",
      "memory usage: 4.6+ MB\n"
     ]
    }
   ],
   "source": [
    "factor_data = factor_data.join(data['return_1m']).dropna().sort_index()\n",
    "factor_data['return_1m'] -= factor_data['Mkt-RF']\n",
    "factor_data.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:31.351523Z",
     "start_time": "2020-06-19T13:32:31.316074Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Mkt-RF</th>\n",
       "      <th>SMB</th>\n",
       "      <th>HML</th>\n",
       "      <th>RMW</th>\n",
       "      <th>CMA</th>\n",
       "      <th>return_1m</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>92011.000000</td>\n",
       "      <td>92011.000000</td>\n",
       "      <td>92011.000000</td>\n",
       "      <td>92011.000000</td>\n",
       "      <td>92011.000000</td>\n",
       "      <td>92011.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>0.005727</td>\n",
       "      <td>0.003220</td>\n",
       "      <td>0.001494</td>\n",
       "      <td>0.003553</td>\n",
       "      <td>0.001662</td>\n",
       "      <td>0.004408</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.042299</td>\n",
       "      <td>0.025564</td>\n",
       "      <td>0.027218</td>\n",
       "      <td>0.021960</td>\n",
       "      <td>0.018234</td>\n",
       "      <td>0.081359</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-0.172300</td>\n",
       "      <td>-0.062400</td>\n",
       "      <td>-0.111800</td>\n",
       "      <td>-0.091300</td>\n",
       "      <td>-0.065500</td>\n",
       "      <td>-0.378115</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>-0.018300</td>\n",
       "      <td>-0.013400</td>\n",
       "      <td>-0.012100</td>\n",
       "      <td>-0.009400</td>\n",
       "      <td>-0.010400</td>\n",
       "      <td>-0.039825</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>0.010900</td>\n",
       "      <td>0.002800</td>\n",
       "      <td>-0.001000</td>\n",
       "      <td>0.002800</td>\n",
       "      <td>-0.000300</td>\n",
       "      <td>0.002590</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>0.031300</td>\n",
       "      <td>0.021600</td>\n",
       "      <td>0.016100</td>\n",
       "      <td>0.013300</td>\n",
       "      <td>0.010700</td>\n",
       "      <td>0.046411</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>0.113500</td>\n",
       "      <td>0.068100</td>\n",
       "      <td>0.128700</td>\n",
       "      <td>0.090000</td>\n",
       "      <td>0.095600</td>\n",
       "      <td>0.476686</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             Mkt-RF           SMB           HML           RMW           CMA  \\\n",
       "count  92011.000000  92011.000000  92011.000000  92011.000000  92011.000000   \n",
       "mean       0.005727      0.003220      0.001494      0.003553      0.001662   \n",
       "std        0.042299      0.025564      0.027218      0.021960      0.018234   \n",
       "min       -0.172300     -0.062400     -0.111800     -0.091300     -0.065500   \n",
       "25%       -0.018300     -0.013400     -0.012100     -0.009400     -0.010400   \n",
       "50%        0.010900      0.002800     -0.001000      0.002800     -0.000300   \n",
       "75%        0.031300      0.021600      0.016100      0.013300      0.010700   \n",
       "max        0.113500      0.068100      0.128700      0.090000      0.095600   \n",
       "\n",
       "          return_1m  \n",
       "count  92011.000000  \n",
       "mean       0.004408  \n",
       "std        0.081359  \n",
       "min       -0.378115  \n",
       "25%       -0.039825  \n",
       "50%        0.002590  \n",
       "75%        0.046411  \n",
       "max        0.476686  "
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "factor_data.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:32.137275Z",
     "start_time": "2020-06-19T13:32:31.352423Z"
    }
   },
   "outputs": [],
   "source": [
    "T = 60\n",
    "betas = (factor_data\n",
    "         .groupby(level='ticker', group_keys=False)\n",
    "         .apply(lambda x: PandasRollingOLS(window=min(T, x.shape[0]-1), \n",
    "                                           y=x.return_1m, \n",
    "                                           x=x.drop('return_1m', axis=1)).beta)\n",
    "        .rename(columns={'Mkt-RF': 'beta'}))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:32.167180Z",
     "start_time": "2020-06-19T13:32:32.138071Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>beta</th>\n",
       "      <th>SMB</th>\n",
       "      <th>HML</th>\n",
       "      <th>RMW</th>\n",
       "      <th>CMA</th>\n",
       "      <th>total</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>57912.000000</td>\n",
       "      <td>57912.000000</td>\n",
       "      <td>57912.000000</td>\n",
       "      <td>57912.000000</td>\n",
       "      <td>57912.000000</td>\n",
       "      <td>57912.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>0.037845</td>\n",
       "      <td>0.195904</td>\n",
       "      <td>0.051635</td>\n",
       "      <td>-0.036271</td>\n",
       "      <td>0.011049</td>\n",
       "      <td>0.260162</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.457200</td>\n",
       "      <td>0.593286</td>\n",
       "      <td>0.798142</td>\n",
       "      <td>0.905310</td>\n",
       "      <td>1.005441</td>\n",
       "      <td>1.709818</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-1.830339</td>\n",
       "      <td>-2.021642</td>\n",
       "      <td>-4.123998</td>\n",
       "      <td>-5.032583</td>\n",
       "      <td>-5.242464</td>\n",
       "      <td>-10.063024</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>-0.273253</td>\n",
       "      <td>-0.213114</td>\n",
       "      <td>-0.448660</td>\n",
       "      <td>-0.541976</td>\n",
       "      <td>-0.570690</td>\n",
       "      <td>-0.748623</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>0.022784</td>\n",
       "      <td>0.152340</td>\n",
       "      <td>-0.027769</td>\n",
       "      <td>0.027444</td>\n",
       "      <td>0.055536</td>\n",
       "      <td>0.219300</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>0.326940</td>\n",
       "      <td>0.572688</td>\n",
       "      <td>0.476866</td>\n",
       "      <td>0.523271</td>\n",
       "      <td>0.634700</td>\n",
       "      <td>1.254497</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>2.417374</td>\n",
       "      <td>2.782247</td>\n",
       "      <td>4.659904</td>\n",
       "      <td>3.832055</td>\n",
       "      <td>4.710014</td>\n",
       "      <td>9.846277</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               beta           SMB           HML           RMW           CMA  \\\n",
       "count  57912.000000  57912.000000  57912.000000  57912.000000  57912.000000   \n",
       "mean       0.037845      0.195904      0.051635     -0.036271      0.011049   \n",
       "std        0.457200      0.593286      0.798142      0.905310      1.005441   \n",
       "min       -1.830339     -2.021642     -4.123998     -5.032583     -5.242464   \n",
       "25%       -0.273253     -0.213114     -0.448660     -0.541976     -0.570690   \n",
       "50%        0.022784      0.152340     -0.027769      0.027444      0.055536   \n",
       "75%        0.326940      0.572688      0.476866      0.523271      0.634700   \n",
       "max        2.417374      2.782247      4.659904      3.832055      4.710014   \n",
       "\n",
       "              total  \n",
       "count  57912.000000  \n",
       "mean       0.260162  \n",
       "std        1.709818  \n",
       "min      -10.063024  \n",
       "25%       -0.748623  \n",
       "50%        0.219300  \n",
       "75%        1.254497  \n",
       "max        9.846277  "
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "betas.describe().join(betas.sum(1).describe().to_frame('total'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:32.499819Z",
     "start_time": "2020-06-19T13:32:32.168034Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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//tfVa9R/n6GOZ1OOZ1O37HD4ZDD4dDBgwc1adIk1axZU3feeaeSk5MlScOHD1enThfOLuXqX31ubq4GDhwY6DJgyP/h6IU7BdCjD/aXdHoP8j29eynr5ElF2u3aun27+jiSivRt0uhabfj0U3Vq104ff/apml13nbJdLnXqc79WvbFAdrtdn237XJ3bt9fba9fqqwMHNColRf85flwut1vVq1T9rRJQAo888oik03uQu3fvrqysLEVGRmrbtm3q1atXkb6NGzfWxo0blZiYqE2bNik+Pl6SNH78eIWGhio1NVVW6+ndZLGxsb5V/kqVKqmgoEAej6cUZwaUbQ2va6xPP87QbW3a6sudO1S3Xr1Al4QLuKbRdfps08dq1bqN9uzaqTpXXfiavbd2tb45sF+DUobqv8ePye12qUrV8vkz7JdAfLZnnnlGycnJysrK0oABA7RixQpVqVJFDz74YPAFZKCkQkNC9NSgZA148kl5vR51bt9eNapXV9bJk3p28iS9PO4FDejdWyMmjNfy1at0SaVKmjTqWUXa7Xqs/wA98PjjCgsLVfOmzXRLiwTl5+drxIQJ6pU8SBZZNPbpp9lecRGEhIToiSee0ODBg+XxeNSxY0ddeumlysrK0rhx4zRlyhT169dPY8aM0YoVK1S5cmW98MIL2rNnj9555x01adJEDz30kCSpR48e6tmzp8aOHasHH3xQ+fn5GjRokOx2e4BnCZQdN992mz7/12d6tH9feb3S0JHP6h/vrlNOjlt3d+oS6PLwGxJuuVXbtmzWkIdPLwg9PmyEPnz/XeXk5Khdx98Ogn/tkKipE57X0EEDZbFY9NjTI4LulYKQkBDddNNNkqQ33njDd8eiyMjIYo23eL1e78Uq7mxpaWn/0wrw/zoef7yyvoKMok5FFe8/BpQtianzA10C/LTgsd6BLgF+ys0rCHQJKIGra1T5zfO9e/fWG2+8cd7H5xNcvy4AAACgwvv66681ZMgQeb3eIo/3799frPEEZAAAAASVadOm+R4nJSX95uPzISADAAAgqFgslv9pPAEZAAAAQaVXr16Ki4vTtddeK0n65S13FotFN9xwwwXHE5ABAAAQVN566y2tXr1au3btUosWLZSYmKhatWoVezwBGQAAAEGlYcOGatiwobxerz799FPNmjVLx48fV+vWrYu1D9laCjUCAAAA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\n",
      "text/plain": [
       "<Figure size 720x720 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cmap = sns.diverging_palette(10, 220, as_cmap=True)\n",
    "sns.clustermap(betas.corr(), annot=True, cmap=cmap, center=0);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:32.595478Z",
     "start_time": "2020-06-19T13:32:32.500707Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "data = (data\n",
    "        .join(betas\n",
    "              .groupby(level='ticker')\n",
    "              .shift())\n",
    "       .dropna()\n",
    "       .sort_index())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:32.606609Z",
     "start_time": "2020-06-19T13:32:32.596677Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "MultiIndex: 57334 entries, ('A', Timestamp('2010-12-31 00:00:00')) to ('ZION', Timestamp('2017-12-31 00:00:00'))\n",
      "Data columns (total 19 columns):\n",
      " #   Column      Non-Null Count  Dtype  \n",
      "---  ------      --------------  -----  \n",
      " 0   atr         57334 non-null  float64\n",
      " 1   bb_down     57334 non-null  float64\n",
      " 2   bb_high     57334 non-null  float64\n",
      " 3   bb_low      57334 non-null  float64\n",
      " 4   bb_mid      57334 non-null  float64\n",
      " 5   bb_up       57334 non-null  float64\n",
      " 6   macd        57334 non-null  float64\n",
      " 7   natr        57334 non-null  float64\n",
      " 8   rsi         57334 non-null  float64\n",
      " 9   sector      57334 non-null  object \n",
      " 10  return_1m   57334 non-null  float64\n",
      " 11  return_3m   57334 non-null  float64\n",
      " 12  return_6m   57334 non-null  float64\n",
      " 13  return_12m  57334 non-null  float64\n",
      " 14  beta        57334 non-null  float64\n",
      " 15  SMB         57334 non-null  float64\n",
      " 16  HML         57334 non-null  float64\n",
      " 17  RMW         57334 non-null  float64\n",
      " 18  CMA         57334 non-null  float64\n",
      "dtypes: float64(18), object(1)\n",
      "memory usage: 8.5+ MB\n"
     ]
    }
   ],
   "source": [
    "data.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Momentum factors"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can use these results to compute momentum factors based on the difference between returns over longer periods and the most recent monthly return, as well as for the difference between 3 and 12 month returns as follows:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:32.615652Z",
     "start_time": "2020-06-19T13:32:32.607879Z"
    }
   },
   "outputs": [],
   "source": [
    "for lag in [3, 6, 12]:\n",
    "    data[f'momentum_{lag}'] = data[f'return_{lag}m'].sub(data.return_1m)\n",
    "    if lag > 3:\n",
    "        data[f'momentum_3_{lag}'] = data[f'return_{lag}m'].sub(data.return_3m)    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Date Indicators"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:32.629913Z",
     "start_time": "2020-06-19T13:32:32.616835Z"
    }
   },
   "outputs": [],
   "source": [
    "dates = data.index.get_level_values('date')\n",
    "data['year'] = dates.year\n",
    "data['month'] = dates.month"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Target: Holding Period Returns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To compute returns for our one-month target holding period, we use the returns computed previously and shift them back to align them with the current financial features."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:32.643323Z",
     "start_time": "2020-06-19T13:32:32.631304Z"
    }
   },
   "outputs": [],
   "source": [
    "data['target'] = data.groupby(level='ticker')[f'return_1m'].shift(-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:32.659711Z",
     "start_time": "2020-06-19T13:32:32.644589Z"
    }
   },
   "outputs": [],
   "source": [
    "data = data.dropna()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:32.691249Z",
     "start_time": "2020-06-19T13:32:32.661171Z"
    },
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "MultiIndex: 56756 entries, ('A', Timestamp('2010-12-31 00:00:00')) to ('ZION', Timestamp('2017-11-30 00:00:00'))\n",
      "Data columns (total 27 columns):\n",
      " #   Column         Non-Null Count  Dtype  \n",
      "---  ------         --------------  -----  \n",
      " 0   atr            56756 non-null  float64\n",
      " 1   bb_down        56756 non-null  float64\n",
      " 2   bb_high        56756 non-null  float64\n",
      " 3   bb_low         56756 non-null  float64\n",
      " 4   bb_mid         56756 non-null  float64\n",
      " 5   bb_up          56756 non-null  float64\n",
      " 6   macd           56756 non-null  float64\n",
      " 7   natr           56756 non-null  float64\n",
      " 8   rsi            56756 non-null  float64\n",
      " 9   sector         56756 non-null  object \n",
      " 10  return_1m      56756 non-null  float64\n",
      " 11  return_3m      56756 non-null  float64\n",
      " 12  return_6m      56756 non-null  float64\n",
      " 13  return_12m     56756 non-null  float64\n",
      " 14  beta           56756 non-null  float64\n",
      " 15  SMB            56756 non-null  float64\n",
      " 16  HML            56756 non-null  float64\n",
      " 17  RMW            56756 non-null  float64\n",
      " 18  CMA            56756 non-null  float64\n",
      " 19  momentum_3     56756 non-null  float64\n",
      " 20  momentum_6     56756 non-null  float64\n",
      " 21  momentum_3_6   56756 non-null  float64\n",
      " 22  momentum_12    56756 non-null  float64\n",
      " 23  momentum_3_12  56756 non-null  float64\n",
      " 24  year           56756 non-null  int64  \n",
      " 25  month          56756 non-null  int64  \n",
      " 26  target         56756 non-null  float64\n",
      "dtypes: float64(24), int64(2), object(1)\n",
      "memory usage: 11.9+ MB\n"
     ]
    }
   ],
   "source": [
    "data.sort_index().info(null_counts=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Sector Breakdown"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:32.899856Z",
     "start_time": "2020-06-19T13:32:32.692142Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdaUBUdf///ycMW2yKoCAKKrjmFSrp5VYaVmauZUqA4pYaFm5kigKFG4Lgkpi4lFeGmWKil7n0y+3StBA1S8UFRU1AWXJDQGBgzv8Gf+criYorM/B+3JIzM2c+70F5ec4M52WgKIqCEEIIoWMMK3sBQgghRHkkoIQQQugkCSghhBA6SQJKCCGETpKAEkIIoZMkoIQQQugkCSghKskff/yBr68vffr0oXfv3owcOZKzZ88+9v5SU1MZO3bsE6+rWbNm9OnTh379+tGnTx/69u3Lzp07n3i/d/P19eWnn3566P169+7NwYMHn+pzC/1hVNkLEKI6Kioq4sMPP2TlypW0bNkSgP/+97+MGjWKXbt2oVKpHnmfly9f5sKFC09lfatWraJWrVoA/PnnnwwdOpTExERMTEyeyv6FqAgJKCEqwe3bt7l16xb5+fnabX379sXS0pKSkhJUKhW7d+8mJiYGtVqNmZkZU6ZMoU2bNhQXFxMZGcn//vc/VCoVbdq04fPPPyc4OJjMzEw++OADvv76a3bu3MnixYvRaDRYWFgwdepU3NzciI6O5o8//iArK4tmzZoRFRX1wLXeuHGDWrVqYWRkRFpaGoMGDcLV1ZX09HRiY2NJS0sjKiqK27dvY2hoiL+/Px4eHuTn5xMaGspff/3FjRs3sLCwICoqChcXF+2+i4uL+eSTTzAyMiIiIoKLFy8ybdo0bt++jYuLS5nXp7x5nJyc6NatGwcOHMDc3JzPPvuM8+fPs3r1agC6d+9OTEwMo0aN4t133+W3337jypUr9OvXjwkTJjzl76p46hQhRKVYuXKl4ubmpnTr1k2ZNGmSsn79eiU/P19RFEW5cOGC0rt3b+XatWuKoihKcnKy0rlzZyUvL09ZtWqVMmjQIOX27dtKSUmJMn78eGXjxo1KQkKC0qtXL0VRFOXcuXNKp06dlEuXLimKoii//vqr0rlzZ+XWrVvKokWLlLfeektRq9Xlrqtp06ZK7969lb59+ypvvPGG0qxZM2XdunWKoihKamqq0rRpU+XQoUOKoijKjRs3lO7duyupqamKoihKRkaG0qVLFyU9PV3Zvn27MnPmTO1+Q0JClBkzZiiKoiiDBw9WNm/erHz00UfK9OnTFY1GoyiKovTr10+Ji4tTFEVRDh8+rDRr1kxJSEh44Dy+vr7K7t27FUVRlO7duyudOnVScnNzlbNnzypvv/22oiiK4uHhoYSHh2vX+NJLL2n3JXSXHEEJUUmGDx/OwIEDOXToEIcOHWLFihWsWLGCH374gQMHDpCVlcWwYcO09zcwMODSpUv8+uuv9OvXDzMzMwAWLlwIUOa9moSEBDp06ICTkxMAHTt2pFatWpw4cQKA1q1bY2R0/3/+d5/iO3nyJMOHD8fV1RV7e3uMjIxo3bo1UPo+WnZ2Nh9//HGZdZ45c4YePXrg5OREbGwsf/31F4mJibRp00Z7v4iICPLy8tixYwcGBgZcv36dM2fO8M477wDw8ssv06RJk4fO8+abb7Jv3z6cnZ2xt7enadOmHDp0iDNnztC9e3ft873++usA2NvbY2try82bN7X7E7pJAkqISnDkyBGOHj3KyJEj8fDwwMPDg4CAAHr37s2BAwfQaDR07NhRGz4AV65coU6dOvcEy99//41GoymzTaPRYGBgUGaboigUFxcDYG5uXuG1vvjii7z88sscOXKEnj17YmJiol1DSUkJrq6urF+/Xnv/zMxMatWqxZo1a4iLi2PQoEH06dOHmjVrkpaWpr1f3759URSF4OBgli5dWmadd9x5ngfN8+abbzJo0CAaNmxI586dsba2Zv/+/Rw/fpzp06dr729qaqr9s4GBQZnnEbpJPsUnRCWoVasWMTExHD58WLstOzub3NxcmjZtSseOHTlw4AApKSkA7N27l759+1JQUEDHjh3ZsmULRUVFaDQaQkND2bp1KyqVCrVaDZQeYezfv5/U1FQA7XsvrVq1euS1Xr16lRMnTvDSSy/dc1vr1q3566+/OHToEACnTp3irbfeIjMzk/379/Puu+8ycOBAGjVqxO7duykpKdE+1s3NjQkTJnDp0iXi4uKwsbGhZcuW2rBLSkoiOTn5ofM4ODhgY2PD2rVr6dy5M6+88go///wzN27coHnz5o88r9AdcgQlRCVo1KgRX375JQsWLCAjIwNTU1OsrKwICwvTfohgxowZBAQEoCgKRkZGxMTEYGFhgZeXF+np6fTv3x9FUfj3v/+Nr68vubm5mJqaMmDAANavX8/nn3+Ov78/JSUlmJmZsXTpUqysrCq0vqFDh2JoWPr/16KiIkaPHk3Hjh3LHAFBadAuWrSIuXPnUlhYiKIozJ07l/r16zNixAg+++wzfvjhB6A0zO4Ezh2mpqaEh4czYsQIOnTowPz585k6dSpr167F2dlZ+1o0btz4gfO8+eabrFy5khdffBFDQ0PMzMx44403Hv8bJHSCgSLHuUIIIXSQnOITQgihkySghBBC6CQJKCGEEDpJAkoIIYROkoCqho4dO1bZS3jmLl68WNlLeKZkPv0m81WMBFQ1dPfvolRVt2/fruwlPFMyn36T+SpGAkoIIYROkoASQgihkySghBBC6CQJqGqoOpTOtWjRorKX8EzJfPqtqs5XoH6672/LtfiqIUNDQxoGbq3sZQghqpiL4b2e6v4qPaDOnj1LZGQkt2/fJj8/n65duzJ27Nh7Lq2vyzZu3MjGjRtRqVQoisLIkSN55ZVXHnt/s2fPZvjw4Tg6Oj7FVQohhH6p1IDKyckhICCA6OhoGjZsSElJCePHj2ft2rV4e3tX5tIq7NatWyxZsoStW7diYmJCZmYmAwcO5H//+5/2atCPKigo6CmvUggh9E+lBtSuXbto3749DRs2BEClUhEREYGxsTEA4eHhHDlyBIDevXszdOhQAgMDMTExIT09naysLMLDw2nZsiWBgYFcunSJwsJCPvjgA3r27Em3bt3Yvn07pqamREVF4eLiQr169Vi+fDnGxsZkZGTg5eVFQkICp0+fZsiQIfj4+JCYmMiCBQtQqVQ4OTkxY8YMfvzxRzZs2IBGo2HcuHF07NgRKC1+Kykp4fvvv8fDwwNnZ2d27tyJoaEhV65cISQkhMLCQkxNTZk5cyYlJSWMGTOGmjVr0qVLF+Lj49m2bRsGBgZMnz6dTp068e233xIaGkrNmjUJDAzk1q1bKIpCREQEtra2BAUFcf36dQCCg4Np1qxZufMLIYQ+q9SAysrKuqdy2cLCAoA9e/aQlpZGXFwcxcXF+Pj40KFDBwAcHR2ZMWMGcXFxrFu3jsmTJ3Pw4EE2bNgAwIEDBx74vBkZGWzatImkpCTGjx/Pjh07yMzMxN/fH29vb0JCQlizZg22trYsXLiQjRs3YmRkhLW1NTExMWX2pVKp+M9//sOqVasYOXIkarWaUaNG4ePjQ0REBL6+vnTt2pXffvuNqKgoJk6cSHZ2Nhs2bMDExISkpCQOHz5Mq1atSExMJCgoiG+//RaAmJgYunXrhre3N7/99hvHjh3jzJkzdOjQAR8fHy5evMjUqVNZsWLFI80vhBDPyqlTpygoKODUqVMVfsz9PjRSqQHl6OjIyZMny2xLTU0lIyODlJQU2rZti4GBAcbGxrRq1UrbLnpnGAcHB37//XcsLS0JCQkhJCSE3Nxc+vbte89z3V171aRJE4yNjbGyssLZ2RkTExNq1KhBYWEh165dIysriwkTJgBQUFBA586dcXZ2plGjRvfsNzMzk4KCAj777DMALly4wMiRI3n55ZdJTk5m2bJlfPXVVyiKoj0yrF+/vvaTdJ6enmzcuJHs7Gy6detWps77woULDBgwAEB7xDZq1CgSEhLYvn07UHqatCLzCyHE89CiRQtOnTr1VD6pWKkB5eHhwbJly/D29sbZ2Rm1Wk14eDidOnXC1dWV+Ph4hg0bhlqt5ujRo7z77rsA93yAIisri6SkJL788ksKCwvp2rUr/fr1w8TEhKysLOrXr8/p06dxdXUt9/F3s7GxwcHBgSVLlmBlZcWuXbswNzfnypUr5b6n9PfffxMYGMjq1aupUaMG9erVw8bGBmNjY1xcXBgxYgTu7u6kpKRoa7Hv3k/Hjh2JjIwkMzNTG3J3uLq6cvz4cZo3b86hQ4f43//+h4uLC3379qVPnz5cvXqV9evX33f+u8NOCCH0TaX+BLO0tCQ8PJzg4GAURSEvLw8PDw98fHwwMDAgMTGR999/H7VaTY8ePWjZsmW5+6lduzbZ2dm88847mJubM2LECIyMjBg5ciSjR4+mXr16WFtbV2hNhoaGBAUFMXr0aBRFwcLCgrlz53LlypVy79+yZUuGDBnC0KFDMTMzo6SkhIEDB+Li4sKUKVMIDQ2lsLCQgoKCcj/8YGBgwFtvvcWvv/5KgwYNytzm5+fHtGnT2Lx5MwBhYWFYWloSFBREXFwcubm5+Pv733d+IYTQZ1L5Xg0lJSXdN+yFEOJxFahLMDNWPbVTfHIliWqoqKiospfwzD3KG7T6SObTb1V1PjNj1VPdnwSUEEIInSQBJYQQQidJQAkhhNBJElBCCCF0kgSUEEIInSQBJYQQQidJQAkhhNBJElBCCCF0kgRUNSSV7/pP5tNvz2u+p13B/rzJBduqIal8F6J6eNoV7M+bBNQ/hIeHk5SURHZ2NgUFBTg5OWFjY8OiRYse+ti7CxIfR1paGgEBAcTFxT3W44UQoiqRgPqHwMBAAOLj4zl//jyTJk2q5BUJIUT1JAH1EGq1ms8//5y//voLjUbDhAkTaN++PXv27GHx4sUAvPjii0yfPh2A0NBQ0tLSAFi8eDG7du1i7969FBQUcOnSJUaNGkX//v05efIkM2fORKVSaevg73bgwAEWLlyIqakpNWvWJCwsDCsrK6ZPn86JEyews7MjPT2dJUuWMGLECNavX0/NmjVZs2YN+fn5jBw58vm+UEIInVQZF6atEo26+mD9+vXY2NgQFhbG9evXGTx4MP/973+ZOXMm69evx9bWlsWLF5ORkQHAe++9R9u2bQkMDNRWr+fm5vL1119z8eJF/Pz86N+/P8HBwcyePZsWLVqwc+dOwsPDmTx5MlDa/hsSEsL333+Pvb09q1atIiYmhpdffpkbN27www8/cO3aNbp3746BgQF9+vRh69atDBo0iM2bN2uDUwghKuMDJ1WiUVcfJCcnc+TIEY4dOwZAcXExV69exdraGltbWwD8/f219//Xv/4FgJ2dHQUFBQA0b94cgLp162qrLrKysrTfwHbt2jFv3jztPq5fv46lpSX29vba2+fPn4+NjQ2tW7cGoFatWri4uAAwYMAAJk6cSLt27bCzs8POzu7ZvBhCCPEcycfMH8LFxYVevXoRGxvLihUr6NGjB7Vr1yYnJ4cbN24AMGvWLG2AlVcnX962OnXqcPr0aQAOHTpEw4YNtbfZ2NiQm5tLVlYWAImJiTRs2JAmTZrwxx9/AHDz5k0uXrwIgKOjI1ZWVixdupQBAwY8tdmFEKIyyRHUQ3h5eREcHMzgwYPJzc3Fx8cHQ0NDPv/8cz788EMMDQ158cUXeemllx5pv7NmzWLmzJkoioJKpSIsLEx7m4GBAbNmzWLs2LEYGBhQo0YN5syZg42NDfv27cPLyws7OzvMzMwwNjYGwNPTk1mzZhEZGflU5xdCiMoile96JCUlhdOnT9OrVy+uX79O79692bNnDyYmJmzbto2zZ88yfvz4h+5HKt+FqB7uVLA/b1L5Xg3VrVuXLVu24OnpyciRI5k0aRImJibMnz+f1atXM3To0ArtRyrf9Z/Mp9+e13yVEU5Pk5zi0yPm5ubExMTcsz0gIKASViOEEM+WHEEJIYTQSRJQQgghdJIElBBCCJ0kASWEEEInSUAJIYTQSRJQQgghdJIEVDUkjbr6T+Z7fPreMludyO9BVUPSqCuqM31vma1OJKCeorS0NPr27VvmMkLt27cHyl7xXAghxMNJQD1ljRs3JjY2trKXIYQQek8C6hk7ePAga9euZcGCBXTv3h13d3cuXLiAra0t0dHR3L59m6CgIG7dusX169cZOHAgPj4++Pr60rx5c86ePUtubi5ffPEF9erVY8mSJezcuZOSkhK8vb3x8vIiNjaWLVu2YGBgQM+ePRkyZEhljy2EEE9MAuopO3fuHL6+vtqvBw4cqP1zamoqq1atom7dunh5eXH8+HGMjY3p1asX3bt3JzMzE19fX3x8fABwc3MjKCiIBQsWsHXrVl555RX27dvH+vXrKSoqYt68eZw9e5Zt27axZs0aDAwMGDZsGK+88oq2zFAIca/Kvhjto1ai6xupfNdR/zzFd/DgQe2fbWxsqFu3LlB6ZfLCwkLq1q3LqlWr+Pnnn7G0tKS4uFh7/xdffBEABwcH/v77by5cuICbmxsqlYoXXniB4OBgtm3bxuXLlxk2bBhQWmR46dIlCSghHqCyPwX5tOoodJXUbeih8pp1V65cSevWrYmKiqJHjx48qJ7LxcWFkydPotFoUKvVDB8+HBcXFxo3bsy3335LbGws/fv3p2nTps9yDCGEeC7kCKqSeXh4EBoayo8//kjNmjVRqVT37Wtq0aIFr776Kt7e3mg0Gry9vWnevDkdO3bE29uboqIi3NzcsLe3f85TCCHE0yeNutXQqVOneHvV+cpehhCVQhd+D0pO8VWMHEFVQxqNRif+kQpRGSqrBl08OnkPqhqSynf9J/M9Pgkn/SEBJYQQQidJQAkhhNBJElBCCCF0kgSUEEIInSQBJYQQQidJQAkhhNBJElBCCCF0kgRUNSSV7/qvus8nte3Vg1xJohqSyneh7+RKKNWDHEFRWokxceLEMtuioqKIj49/pP2kpaXh6ekJwKFDhzh9+jQAnTt3fuhj161bx6BBg/D19cXLy6tMTYcQQlRHcgT1jGzYsIGePXvSvHnzh95369atHDhwgG+++QZjY2NSU1MZPHgwGzdupFatWs9htUIIoXskoCpg3rx5HDp0CEVRGDZsGG+//TaJiYksXrwYKG2PjIiIwNjYGIATJ07wyy+/kJSUROPGjSkqKuKTTz7h8uXL1KxZk0WLFmnvC7B27VqmTp2q3ebk5MSmTZuwsbEhOTmZ8PBwNBoNOTk5BAcH4+7ujoeHBy4uLri4uDBixAhCQkIoLCzE1NSUmTNnaosRhRBCX0lA/f8SEhLKVLWnpqYybtw49u7dS1paGmvXrqWwsBBPT086d+7M2bNniYyMxN7enqVLl/LTTz/Rp08fAP71r3/x6quv0rNnTxwdHcnPz2fixInUr18fX19fTp06hZubm/a5srKycHJyKrMeGxsboLRCfsqUKTRr1owff/yR+Ph43N3duXLlCvHx8djY2DBhwgR8fX3p2rUrv/32G1FRUcybN+85vGpCVB59vmCuVL6XJZXvD9GhQwcWLFig/ToqKgqA5ORkkpKStOFVXFzM5cuXsbe3Z/bs2Zibm5OZmYm7u/t9912jRg3q168PgJ2dHbdv3y5ze7169bhy5QpWVlbabfv376dZs2bUqVOHJUuWYGZmRl5eHpaWlkBpgN0JseTkZJYtW8ZXX32Foihljs6EqKr0+ZOM0gdVMRJQD+Hi4kL79u2ZOXMmGo2GJUuWUL9+fYYNG8bOnTuxtLRkypQp91S1GxgYaLeVV/V+t/fee48lS5YQFRWFkZERFy5cICgoiPj4eGbPnk1UVBSurq4sWrSI9PR0oPSTeHevccSIEbi7u5OSksKhQ4ee8qsghBDPnwTUQ3Tr1o3ExER8fHzIz8/njTfewNLSkn79+uHp6Ym1tTV2dnZkZWWVeVyrVq2IiorSHjk9SK9evcjOzsbHxwdjY2NKSkqIjIzE1taWvn378tFHH2Fra4uDgwPXr1+/5/FTpkwhNDSUwsJCCgoKCAoKemrzCyFEZZHK92ooKSmJli1bVvYyhHhs+t6KK6f4KkZ+D6oakkZd/Vfd59PncBIVJwElhBBCJ0lACSGE0EkSUEIIIXSSBJQQQgidJAElhBBCJ0lACSGE0EkSUEIIIXSSBJQQQgidJAFVDUnlu/7Tl/mkml08iSp/Lb47tRi3b98mPz+frl27Mnbs2IdewPVu2dnZfPnll4SGhnLo0CGsrKzuW0QYHx/P+fPnmTRpUpntqampREZGkpGRgZmZGWZmZnz66ac0adLksWcrLCzk7bffZvfu3Y/0OKl8F8+LVLOLJ1Glj6BycnIICAhg2rRpxMbGEhcXR3JyMmvXrn2k/dSuXZvQ0FCgtCn3nxeGfZjbt28zZswYhg8fTlxcHN9++y3+/v7MmDHjkfYjhBDVSZU+gtq1axft27enYcOGAKhUKm3zbUlJCZ999hkZGRlcv36dLl26MGHCBAIDA1EUhStXrpCfn09ERASmpqYEBATw2WeflWnK3b17Nz///DPFxcVYWVkRHR1d7jr27NlDhw4daNOmjXabm5sb3377LQBpaWkEBQVRXFyMgYEBwcHBNG/enM2bN7Nq1SpMTExo2LAhM2bMoKioiEmTJpGTk4Ozs7N2f9999x2bNm3C0NAQd3d3pkyZ8uxeWCGEeA6qdECV11RrYWEBlIZC69atGThwIIWFhdqAgtLK9YiICPbu3UtkZCTBwcFA2aZcBwcHbty4wTfffIOhoSEffPABx48fL3cdaWlpZcJkzJgx5ObmkpWVxapVq5g7dy6+vr688cYbnDp1imnTpvH1118THR3Nxo0bsbS0JCwsjHXr1gHQtGlTJk6cyJ9//snBgweB0lOLISEhtG7dmjVr1lBcXIyRUZX+9go98TgXtpXGWf0mjboV4OjoyMmTJ8tsS01NJSMjgxYtWnD8+HESEhKwtLQsc4XvDh06ANCmTRvCwsLK3behoSHGxsYEBARgbm5ORkYGxcXF5d7XwcGBEydOaL+OiYkBwNPTk+LiYlJSUmjXrh1Q+o3KyMggNTWVxo0baxt027Vrx/79+wF49dVXgdLOqTshNGfOHFauXElUVBStW7e+p0BRiMryOB/okDoK/SZ1GxXg4eHBL7/8wqVLlwBQq9WEh4eTnJxMfHw8VlZWzJs3jxEjRlBQUKD9oZ6UlATA77//fs+HGO405Z4+fZqdO3eycOFCQkJC0Gg09w2F119/nd9++40//vhDu+2vv/4iIyMDAwMDXF1dOXz4MFD6jbWzs6N+/fqkpKSQn58PQGJiIo0aNcLFxUW7n5MnT2pDMS4ujunTp7N69WpOnTrF0aNHn9bLKIQQlaJKH0FZWloSHh5OcHAwiqKQl5eHh4cHPj4+nDt3joCAAI4cOcILL7xAgwYNtB9+2LdvH7t27UKj0TBnzpwy+7zTlDt//nxeeOEF+vfvj4mJCbVr177vhycsLCyIiYlh3rx5REVFaU+/zZw5k3r16jF58mRCQkJYuXIlxcXFzJ49m1q1ajF27FiGDBmCoaEhzs7OTJo0CZVKxdSpU/H29sbFxQVjY2MAmjVrxoABA7CxscHe3p5WrVo92xdXCCGeMWnU/YfAwEB69uxJly5dKnspz8ypU6d4e9X5yl6GqAYe92PmcgpMvz2t+ar0EZQon0ajkd9PEc+Fvlezi8pVpd+Dehzh4eFV+ugJpPK9KtCX+SScxJOQgBJCCKGTJKCEEELoJAkoIYQQOkkCSgghhE6SgBJCCKGTJKCEEELoJAkoIYQQOkkCqhqSRl399zTnk9ZboavkShLVkDTqirvJVUWErpKAeoYOHjzIhAkTaNy4sXabjY0NixYtqsRVCSGEfpCAesY6dOjAggULKnsZQgihdySgKoGvry/Nmzfn7Nmz5Obm8sUXX1CvXj1iY2PZsmULBgYG9OzZkyFDhhAYGMiNGze4ceMGy5YtY8GCBZw4cQI7OzvS09NZsmQJI0aMYP369dSsWZM1a9aQn5/PyJEjK3tMIYR4IhJQz1hCQgK+vr7ar7t27QqAm5sbQUFBLFiwgK1bt9KtWze2bdvGmjVrMDAwYNiwYbzyyitA6VHYsGHD2LlzJzdu3OCHH37g2rVrdO/eHQMDA/r06cPWrVsZNGgQmzdvZvHixZUyq9BfunbxWalE129S+a4nyjvFt3fvXl588UWgtA7+77//Jjk5mcuXLzNs2DAAbt68qW0CbtSoEQDnz5+ndevWANSqVQsXFxcABgwYwMSJE2nXrh12dnbY2dk9j9FEFaJrn3qUviT9JpXvVYyLiwuNGzfm22+/JTY2lv79+9O0aVOgtGYeoEmTJtq695s3b3Lx4kUAHB0dsbKyYunSpQwYMKBS1i+EEE+bHEE9Y/88xQelh7//1Lx5czp27Ii3tzdFRUW4ublhb29f5j6vvfYa+/btw8vLCzs7O8zMzLSV756ensyaNYvIyMhnN4wQQjxHUvmuR1JSUjh9+jS9evXi+vXr9O7dmz179mBiYsK2bds4e/Ys48ePf+h+kpKSaNmy5XNYsdAHuth6K6fA9Juc4quG6taty5YtW/D09GTkyJFMmjQJExMT5s+fz+rVqxk6dGiF9iONuvrvac6na+EkxB1yik+PmJubExMTc8/2gICASliNEEI8W3IEJYQQQidJQAkhhNBJElBCCCF0kgSUEEIInSQBJYQQQidJQAkhhNBJElBCCCF0kgRUNSSV77pNKtiFKCW/qFsNSeW7bpMKdiFKPfQI6uzZs4wePRpfX1/ee+89Fi1ahD5dvi8tLY2WLVty4sQJ7bbvv/+e6OjoJ9rvwYMH6dixI76+vgwePBgvLy+2bdv2pMslMDCQffv2ldmWlpaGp6fnE+9bCCH0yQOPoHJycggICCA6OpqGDRtSUlLC+PHjWbt2Ld7e3s9rjU/M0tKSqVOnsmHDhqd6euvurqe8vDx8fX1p1KiRXp9eEkIIXfHAgNq1axft27enYcOGAKhUKiIiIrQVD4cuVPMAACAASURBVOHh4Rw5cgSA3r17M3ToUAIDAzExMSE9PZ2srCzCw8Np2bIlgYGBXLp0icLCQj744AN69uxJt27d2L59O6ampkRFReHi4kK9evVYvnw5xsbGZGRk4OXlRUJCAqdPn2bIkCH4+PiQmJjIggULUKlUODk5MWPGDH788Uc2bNiARqNh3LhxdOzYUTtHgwYNaNu2LQsWLGDKlCllZty8eTOrVq3CxMSEhg0bave1d+9eCgoKuHTpEqNGjaJ///4PfCEtLCx4//33+emnn8jJyWHt2rXa8OrcuTMHDhwoU98eExNDVFQUGRkZXL9+nS5dujBhwgQA1qxZw9dff01JSQmzZ89Gpfq/i3mWN3taWhpTp07FyMgIlUrF3Llz76nqEPrlYReDlUZW/SbzlfVYjbpZWVk4OTmV2WZhYQHAnj17SEtLIy4ujuLiYnx8fOjQoQNQWqA3Y8YM4uLiWLduHZMnT+bgwYNs2LABgAMHDjxwsRkZGWzatImkpCTGjx/Pjh07yMzMxN/fH29vb0JCQlizZg22trYsXLiQjRs3YmRkhLW1dbkXUwWYMGECAwYM4PDhw9pt169fJzo6mo0bN2JpaUlYWBjr1q3D3Nyc3Nxcvv76ay5evIifn99DAwrA1taWpKSkB97nTn17WloarVu3ZuDAgRQWFpYJKHd3d0aPHs3evXuJjIwkMDAQAEVRyp1drVZr/xNw+PBhbt68KQGl5x52FC51DfpN5quYBwaUo6MjJ0+eLLMtNTWVjIwMUlJSaNu2LQYGBhgbG9OqVStSUlKA//vH5eDgwO+//46lpSUhISGEhISQm5tL375973muu9/XatKkCcbGxlhZWeHs7IyJiQk1atSgsLCQa9eukZWVpf1hXlBQQOfOnXF2dtZWo5fHxMSEOXPm8Mknn2jfz0lNTaVx48ZYWloC0K5dO/bv30+rVq1o3rw5UFpxUVRURF5eHn5+fgB06tQJd3f3e57j8uXLODg4PHC2O2usWbMmx48fJyEhAUtLyzIVGG3btgWgTZs2zJ07V7v9frOPGTOGFStWMHLkSKysrJg4ceJ9XwchhNAXD/yQhIeHB7/88guXLl0CQK1WEx4eTnJyMq6urtrTe2q1mqNHj9KgQQPg/yrK78jKyiIpKYkvv/yS5cuXExkZSXFxMSYmJmRlZaEoCqdPn9be/5+Pv5uNjQ0ODg4sWbKE2NhY/Pz8aN++fekwhg/+zEfLli3p3bs3K1asAKB+/fqkpKSQn58PlJ4+uxMg/1yDhYUFsbGxxMbGMmbMmHv2nZuby/r16+nRowempqZkZ2cDkJ6ezs2bN++ZLT4+HisrK+bNm8eIESMoKCjQBtmxY8cAOHz4ME2aNHno7Lt27eLll19m1apV9OjRg6+++uqBr4MQQuiDBx5BWVpaEh4eTnBwMIqikJeXh4eHBz4+PhgYGJCYmMj777+PWq2mR48e921prV27NtnZ2bzzzjuYm5szYsQIjIyMGDlyJKNHj6ZevXpYW1tXaMGGhoYEBQUxevRoFEXBwsKCuXPncuXKlQo93s/Pjz179gBQq1Ytxo4dy5AhQzA0NMTZ2ZlJkyaxdWvFPoJ9p87d0NCQkpISxo4di4uLC8XFxVhZWTFw4EBcXV2pX7/+PY/t2LEjAQEBHDlyhBdeeIEGDRqQlZUFwJ9//smQIUMwMDAgLCxMG1z3mz0vL49PP/2U6OhoDA0NmTp1aoXWL4QQukwq36shqXzXbRWpYJf3MPSbzFcxciWJakgq33WbVLALUUoCSgghhE6SgBJCCKGTJKCEEELoJAkoIYQQOkkCSgghhE6SgBJCCKGTJKCEEELoJAmoakgadXWHtOcKcX/SqFsNSaOu7pD2XCHur8ofQd3dfOvr64unpyexsbH3vf/92mvvNN3u27ePdevWVeh5/3lV8aioKOLj4wFYvXo1gHZ/dz/vxIkTKSoq4vLly+zevRuA2bNnc/ny5YoNLYQQVUC1OIK6u/m2qKiIHj160K9fvwpfoPZuXbp0eSpriomJYfDgwdr9paWlaW+7s9aEhATOnz9Pt27dCAoKeirPK4QQ+qLKH0H9U25uLoaGhqhUKnx9fbUdVt9//z3R0dFAae+Sn58fnp6efPnll2UeHx8fT1RUFABLliyhf//+9OvXj7Vr11Z4DTExMdy8eZPQ0NAy+7ujW7du5Ofns3z5crZs2cKuXbu0a7116xbjxo3THhGeOXMGKD3C8/Hx4b333mPbtm2P/foIIYSuqBZHUHdqMe6UK4aEhGibgcuTn59PZGQk5ubmDBo0iNdff/2e+5w8eZJ9+/axfv16ioqKmDdvHoqiPLDLCkr7oMaMGcPq1au1AVUelUrF6NGjOX/+PK+//jrffPMNAEuXLqVDhw74+Phw8eJFpk6dyooVKx6psVjolse5sK1Uhus3ma+sx6p8ryruPsV3P3e3jjRv3hwrKysAXnrpJS5cuHDP/S9cuICbmxsqlYoXXniB4ODgMrebmZndc9Xw/Px8TE1NH3cMAJKTk0lISGD79u0A5OTkVKixWOiux/nEodQ16DeZr2Kq3Sm+u5mYmGibb++utk9JSSEvL4/i4mKOHTtWptX2DhcXF06ePIlGo0GtVjN8+PAygeTq6sqpU6e0JYSFhYUcOnRI28NUkRouQ0NDNBrNPc87bNgwYmNjWbhwIX369LlvY7EQQuizanEEdT9DhgxhxowZ1K1blzp16mi316hRg4kTJ3Lt2jV69uxJ48aN73lsixYtePXVV/H29kaj0eDt7V3m94ssLS0JDAzkww8/xMzMDLVaja+vLw0aNABKA2zSpEl06tTpvutr2rQpMTExZcoF/fz8CAoKIi4ujtzcXPz9/e/bWCyEEPpMGnWroVOnTvH2qvOVvQzB4/8elJwi0m8yX8XIf7OrIY1GI78gqiMqUu8uRHVVrd+Dqq6k8l13SDgJcX8SUEIIIXSSBJQQQgidJAElhBBCJ0lACSGE0EkSUEIIIXSSBJQQQgidJAElhBBCJ0lAVUNS+V65pOZdiIqRK0lUQ1L5XrnkKh5CVIxeH0HdXec+ePBgvLy8tAWEj8Lf379C97u74PBh7i5ArKjCwkLWr19/z/bs7GxCQ0MfaV9CCKHv9DqgoLTrKTY2ltWrV+Pv78/cuXMfeR+LFy9+Bit7dNnZ2eUGVO3atSWghBDVTpU6xZeTk0O9evUASExM1AZPQUEBERERODo6Mn78eHJzcykoKODTTz+lffv2dO7cmQMHDvDnn38ye/ZsFEXB3t6eqKgozMzM7nme+Ph49u7dS0FBAZcuXWLUqFH079+fw4cPExYWRo0aNTA0NKR169akpaUREBBAXFwcAJ6ensyfP5/MzEwiIiIwMjLC2tqaqKgoli5dyrlz51i8eDGKonD06FHy8/OZPXs2U6dOJS4ujsTERBYsWIBKpcLJyYkZM2aQlpbG1KlTMTIyQqVSMXfuXOzt7Z/fCy+EEM+A3gfUnTr3oqIizpw5w7JlywA4e/YskZGR2Nvbs3TpUn766SfeeOMN/v77b7755huuXr3KxYsXy+wrJCSEBQsW4OrqynfffUdKSkqZLqa75ebm8vXXX3Px4kX8/Pzo378/c+bMYd68eTRq1IjPP//8geveuXMnb775Jh988AG7d+8mJycHPz8/kpOT8ff3Jzo6GhcXF4KDg0lLSwNKSw5DQkJYs2YNtra2LFy4kI0bN6JWq2nZsiWBgYEcPnyYmzdvSkDpuCe9mK1Uhus3ma+sKlv5fned+/nz5/Hy8mLfvn3Y29sze/ZszM3NyczMxN3dnSZNmjBo0CACAgIoLi7G19e3zL6uXr2Kq6srAIMGDXrg8zZv3hyAunXraq8OnpmZSaNGjQBwd3fn0qVL9zzuTv2Wn58fS5cuZejQodjb2+Pm5nbPVcbv7OuOa9eukZWVxYQJE4DSvwSdO3dmzJgxrFixgpEjR2JlZcXEiRMf/sKJSvWknzKUPiH9JvNVjN6/B3U3Ozs77Z+Dg4MJCwsjPDycOnXqoCgKZ86cIS8vj+XLlxMeHs7MmTPLPL5OnTrao6rly5ezY8eO+z6XgYHBPdtq166t/RDF8ePHATA1NeXq1auUlJSQk5OjPRr68ccfeffdd4mNjaVJkybExcXdU/FuaFj222NjY4ODgwNLliwhNjYWPz8/2rdvz65du3j55ZdZtWoVPXr04KuvvnqEV00IIXST3h9B3TnFZ2hoSF5eHoGBgZiZmdGvXz88PT2xtrbGzs6OrKwsGjZsyJdffsmmTZswNjZm3LhxZfY1ffp0pk2bhqGhIbVr12bYsGGPtJbIyEimTJmChYUFFhYW1KhRg9q1a9O5c2cGDBiAs7OztvL9pZdeIjAwEHNzc4yNjZkxYwa2trao1WoiIyPLfe/L0NCQoKAgRo8ejaIoWFhYMHfuXPLy8vj000+Jjo7G0NCQqVOnPvbrKYQQukIq36uhpKSk+763Jp69p9GiK6eI9JvMVzFV6hSfqBhp1K1c0qIrRMVIQAkhhNBJElBCCCF0kgSUEEIInSQBJYQQQidJQAkhhNBJElBCCCF0kgSUEEIInSQBJYQQQidJQFVD+lT5LvXoQlRfen8tPvHo9KnyXerRhai+qvQR1MGDB2nWrBnbtm0rs71Pnz4EBgZWuOr9QdLS0vD09ASgW7duFBYWPvE+hRBCVPGAAnBxcWHLli3ar8+cOcPt27cB3al6F0IIca8qf4qvefPmXLx4kZycHKytrdm8eTN9+vThypUr2qr37777jk2bNmFoaIi7uztTpkzh4sWLBAcHo1arMTMzY8GCBRQWFhISEkJhYSGmpqb39EndkZycTHh4OBqNhpycHIKDg3F3d6d79+64u7tz4cIFbG1tiY6ORqPR8Pnnn/PXX3+h0WiYMGEC7du358CBAyxcuBBTU1Nq1qxJWFgYp06dYu3atdqCxjvr//nnn1mxYgVGRkbUq1ePuXPn3tMlpc8e58Kv0liq32Q+/SaNuo/gzTffZMeOHfTv359jx44xatQorly5or09Pj6ekJAQWrduzZo1ayguLiYiIoLRo0fTpUsXtm3bxsmTJ/nhhx/w9fWla9eu/Pbbb0RFRZXbXnvu3DmmTJlCs2bN+PHHH4mPj8fd3Z3U1FRWrVpF3bp18fLy4vjx45w8eRIbGxvCwsK4fv06gwcPZsuWLYSEhPD9999jb2/PqlWriImJ4bXXXit3vi1btjBs2DB69erFpk2byM3Nxdra+lm9nM/d41y2X+oM9JvMp9+e1nzVIqD69OlDaGgoTk5OtG3b9p7b58yZw8qVK4mKiqJ169YoisKFCxdo06YNAD179gQgLCyMZcuW8dVXX6EoCsbGxuU+X506dViyZAlmZmbk5eVhaWkJlDbi1q1bFyitii8sLCQ5OZkjR45w7NgxAIqLi7l69SqWlpbY29sD0K5dO+bPn39PQN2p8po6dSrLli3j+++/x8XFhTfeeOMJXzEhhKh81SKgnJycyM/PJzY2loCAAFJTU8vcHhcXx/Tp0zE1NeWDDz7g6NGjuLq6cvz4cTp16sTmzZu5efMmLi4ujBgxAnd3d1JSUjh06FC5zzd79myioqJwdXVl0aJFpKenA+XXxLu4uODg4ICfnx8FBQXExMRgY2NDbm4uWVlZ1KlTh8TERBo2bIipqSnZ2dkApKenc/PmTQDWrVvH2LFjsbW15bPPPmPHjh28++67T/MlFEKI565aBBSUHgX997//pVGjRvcEVLNmzRgwYAA2NjbY29vTqlUrJk+ezGeffUZMTAxmZmZERkby2muvERoaSmFhIQUFBQQFBZX7XH379uWjjz7C1tYWBwcHrl+/ft91eXl5ERwczODBg8nNzcXHxweVSsWsWbMYO3YsBgYG1KhRgzlz5mBtbY2VlRUDBw7E1dWV+vXrA+Dm5sbw4cOpWbMmFhYW9z0VKIQQ+kQq36shfap8f9x6dDnHr99kPv0mle/iselT5bvUowtRfUlACSGE0EkSUEIIIXSSBJQQQgidJAElhBBCJ0lACSGE0EkSUEIIIXSSBJQQQgidJAFVDel6o6606AohoBpd6kj8H11v1JUWXSEEVOGACg8PJykpiezsbAoKCnBycsLGxoZFixZV9tIoLCxk8+bNDBw48L73OXToEFZWVjRv3hx/f38pVxRCVDtVNqACAwOB0q6n8+fPM2nSpEpe0f/Jzs5m/fr1DwyoDRs20LNnT5o3by7hJISolqpsQJUnMDCQGzducOPGDWJiYoiKiiIjI4Pr16/TpUsXJkyYQGBgICYmJqSnp5OVlUV4eDgtW7YkMDCQS5cuUVhYyAcffEDPnj3p2bMnbdu25ezZs9SoUYP58+djbGzMtGnTSE1NpaSkhOHDh9OzZ098fX2xsbEhJyeH+vXrc+7cORYvXsyAAQO0V0i/ceMGH3/8MQ4ODvzyyy8kJSXRuHFjBg4cyIEDBzh58iQzZ85EpVJpG301Gg2ffPIJDg4OpKam8tJLLzF9+vTKfqmFEOKJVauAAujQoQPDhg0jLS2N1q1bM3DgQAoLC7UBBeDo6MiMGTOIi4tj3bp1TJ48mYMHD7JhwwYADhw4AJTWGvfp04d27doxd+5c1q1bh7GxMTY2NkRGRpKbm0v//v3p0KEDUFqc+Oabb5KWlkZycjL+/v78+uuvDB8+nPbt2/P7778THR3Nf/7zH1599VV69uyJo6Ojdu3BwcHMnj2bFi1asHPnTsLDw5k8eTIXL17k66+/5oUXXuCNN94gOzub2rVrP+dX9ul60jpsqdTWbzKffpPK98fUqFEjAGrWrMnx48dJSEjA0tKyzBW+77xYDg4O/P7771haWhISEkJISAi5ubn07dsXACMjI9q1aweAu7s7+/btQ6VS0alTJwAsLS1xdXXV9k/dee671a5dm5iYGH744QcMDAwoLi6+79qzsrK0a2vXrh3z5s0DwNnZWdvaW7t2bQoLCx//BdIRT3qpfqkz0G8yn36Tuo3HdKfVNj4+HisrK+bNm8eIESMoKCjQVqj/s/k2KyuLpKQkvvzyS5YvX05kZCTFxcUUFxdz+vRpAI4cOULjxo1xdXXl8OHDAOTm5pKcnKwtFryzX0NDQzQaDQBffPEF/fr1IzIykvbt25dZwz+ruurUqaN9vkOHDtGwYcNy1yuEEFVBtTuCuqNjx44EBARw5MgRXnjhBRo0aEBWVla5961duzbZ2dm88847mJubM2LECIyMSl+6FStWcPnyZRwdHZk4cSIAISEheHt7U1hYiL+/P7a2tmX2Z2tri1qtJjIykh49ejB79myWLVtG3bp1te27rVq1IioqShtuALNmzWLmzJkoioJKpSIsLOxZvDRCCKETpFH3CXTr1o3t27djampa2Ut5JKdOneLtVecrexn39TR+D0pOoeg3mU+/Pa35qu0RVHWm0Wh0+pdhH7fmXQhRtUhAPYHdu3dX9hIei65Xvks4CSGgGn5IQgghhH6QgBJCCKGTJKCEEELoJAkoIYQQOkkCSgghhE6SgBJCCKGTJKCEEELoJAmoakgq34UQ+kB+Ubcaksp3IYQ+qLSAOnv2LJGRkdy+fZv8/Hy6du3K2LFj9ebK3GlpafTt25eWLVuiKApFRUX07duXwYMHP9F+o6OjsbOzw9vbu8z2zp07a3uohBCiOqiUgMrJySEgIIDo6GgaNmxISUkJ48ePZ+3atff8YNZljRs3JjY2FgC1Ws3HH3+Mo6Mj3bp1q+SVCSGE/quUgNq1axft27fX9hmpVCoiIiIwNjYGIDw8nCNHjgDQu3dvhg4d+khV7HdfZTwqKgoXFxfq1avH8uXLMTY2JiMjAy8vLxISEjh9+jRDhgzBx8eHxMREFixYgEqlwsnJiRkzZvDjjz+yYcMGNBoN48aNo2PHjuXOZGxszJAhQ9i0aRNNmzYlICCAuLg4ADw9PZk/fz4bN27k6NGj5OfnM3v2bDZt2sSJEyfIy8vD1dWVOXPmALBz5062b99OQUEBwcHBuLm5aZ/nzJkzzJo1CygtXQwLC0OtVjNhwgQURUGtVjN9+nSaNWv2TL53z4s06j6YzKffZL6ydKpRNysrCycnpzLbLCwsANizZw9paWnExcVRXFyMj4+PtjK9olXs95ORkcGmTZtISkpi/Pjx7Nixg8zMTPz9/fH29iYkJIQ1a9Zga2vLwoUL2bhxI0ZGRlhbWxMTE/PQuezs7LR9Tvfj4uJCcHAwubm5WFtb85///AeNRkOvXr3IzMwEoF69esyYMYOzZ88yefJkNm7cqH18SEgIYWFhNG7cmPXr1/PVV1/Rpk0bbfniuXPnyM3NfehadZ006j6YzKffZL6KqZSAcnR05OTJk2W2paamkpGRQUpKCm3btsXAwABjY2NatWpFSkoKUPEq9rvdXXfVpEkTjI2NsbKywtnZGRMTE2rUqEFhYSHXrl0jKyuLCRMmAKX/A+jcuTPOzs7lVrWXJz09HQcHhweu4c6+TE1NuXbtGgEBAZibm5Ofn49arQbQ1sg3adKE7OzsMvtKSUlh+vTpQOlpxUaNGtGlSxcuXrzIRx99hJGREWPGjKnQeoUQQpdVysfMPTw8+OWXX7h06RJQ+oM2PDyc5ORkXF1dtaf31Go1R48epUGDBkDFq9hNTEzIyspCURRtRXp5j7+bjY0NDg4OLFmyhNjYWPz8/Gjfvj1Q+qm3hykqKuLbb7+lV69emJqacvXqVUpKSsjJySEtLU17vzv72rdvH1euXGH+/PkEBASUqZw/duwYUHo6z9HRsczzNGrUiIiICGJjY/n000/p2rUrBw8epE6dOqxcuZIxY8Ywf/78h65XCCF0XaUcQVlaWhIeHk5wcDCKopCXl4eHhwc+Pj4YGBiQmJjI+++/j1qtpkePHrRs2bLc/dyvin3kyJGMHj2aevXqYW1tXaE1GRoaEhQUxOjRo1EUBQsLC+bOncuVK1fu+5hz587h6+uLgYEBxcXF9OnTh06dOgGln7obMGAAzs7O2oC9m5ubG0uWLMHT0xMTExOcnJy0lfNpaWkMGTKEoqIiZsyYUeZxoaGhTJkyhZKS0t8Vmj17NjVr1mTixImsWrUKQ0NDPv744wrNLIQQukwq36uhpKSk+4a+Lngajbpyjl+/yXz67WnNJ1eSqIakUVcIoQ8koIQQQugkCSghhBA6SQJKCCGETpIPSVRDf/zxB6amppW9DCGEAMDIyIgmTZrcs10CSgghhE6SU3xCCCF0kgSUEEIInSQBJYQQQidJQAkhhNBJElBCCCF0kgSUEEIInVQpVzMXlUOj0RAaGsqZM2cwMTFh1qxZ5V5pXZ+o1WqmTZtGeno6RUVFjBkzhsaNGxMYGIiBgQFNmjTh888/r1Blii67evUq/fv3Z+XKlRgZGVW5+ZYtW8bu3btRq9V4e3vz73//u8rMqFarCQwMJD09HUNDQ2bOnFllvod//vknUVFRxMbG8tdff5U7U1xcHGvXrtV21Xl4eFT8CRRRbfy///f/lClTpiiKoihHjx5V/Pz8KnlFT+6HH35QZs2apSiKoly7dk3p2rWr8uGHHyoJCQmKoihKSEiI8vPPP1fmEp9YUVGR8tFHHyndu3dXzp07V+XmS0hIUD788EOlpKREyc3NVRYtWlSlZtyxY4cybtw4RVEUZf/+/Yq/v3+VmG/58uVK7969lYEDByqKopQ7U1ZWltK7d2+lsLBQycnJ0f65ovQvssVjO3LkCK+++ioArVu35sSJE5W8oifXo0cPxo8fr/1apVKRlJTEv//9bwC6dOnCr7/+WlnLeyoiIiLw8vKiTp06AFVuvv3799O0aVM+/vhj/Pz8eO2116rUjI0aNaKkpASNRkNubi5GRkZVYj5nZ2eio6O1X5c307Fjx2jTpg0mJibaJvO7S2QfRgKqGsnNzcXS0lL7tUqlori4uBJX9OQsLCywtLQkNzeXcePGMWHCBBRF0bYnW1hYcOvWrUpe5eOLj4+nVq1a2v9YAFVqPoDr169z4sQJvvjiC6ZPn86kSZOq1Izm5uakp6fz9ttvExISgq+vb5WY76233sLI6P/eJSpvptzcXKysrLT3sbCwIDc3t8LPIe9BVSOWlpbk5eVpv9ZoNGX+gumrK1eu8PHHH+Pj40OfPn2IjIzU3paXl1fhVmVdtGHDBgwMDPjtt984deoUU6ZM4dq1a9rb9X0+gJo1a+Li4oKJiQkuLi6YmpqSkZGhvV3fZ/zmm2945ZVX+OSTT7hy5QpDhw5FrVZrb9f3+e64+z20OzP982dOXl5emcB66D6f6gqFTnN3d2ffvn1A6QVjmzZtWskrenJ///03I0aM4NNPP2XAgAEAvPjiixw8eBCAffv20bZt28pc4hP57rvvWL16NbGxsbRo0YKIiAi6dOlSZeYDePnll/nll19QFIXMzExu375Nx44dq8yM1tbW2h/KNWrUoLi4uEr9Hb2jvJnc3Nw4cuQIhYWF3Lp1i5SUlEf6uSMXi61G7nyKLzk5GUVRCAsLw9XVtbKX9URmzZrF9u3bcXFx0W4LCgpi1qxZqNVqXFxcmDVrFiqV/rf0+vr6EhoaiqGhISEhIVVqvrlz53Lw4EEURWHixInUr1+/ysyYl5fHtGnTyM7ORq1WM2TIEP71r39VifnS0tIICAggLi6OCxculDtTXFwc69atQ1EUPvzwQ956660K718CSgghhE6SU3xCCCF0kgSUEEIInSQBJYQQQidJQAkhhNBJElBCCCF0kgSUENVIdnY2U6dOBWDYsGFlbtu0aRO+vr54enri7u6Or68vvr6+bN68mXXr1pW7v7S0NDw9PZ/1skU1pf+XERBCVNiff/7Jv/71L/Lz87GwsChz2zvvvMM777yj/d2W2NjYSlqlEKUkoISoJsaNG8fvv/+Oo6Mja9asobi4mJ9++oke7IQPkwAAAkxJREFUPXo88HHx8fGcP3+eSZMmsWTJEnbu3ElJSQne3t688sorAJSUlBAYGEiTJv9fe3fskloYh3H8q4Io5JpTi3ixDJwajPAfaHQQDoJokFDSIAg1OOgfYEODYENQgoubiLM4CK5BoiIUIc26OBxD7hAJ9y73CvdeTtfns58D77s8vOe8PL9vpNNpqtUqzWYTm83G8fExiUSCq6srptMp0+mUcrm86k1cLBYUi0UCgcC/2Ab5QhRQIhvi5uaG09NTyuUylUqFcDi8VsVOv9+n0+lQr9cxTZNSqcTR0RHv7+/kcjkODg6Ix+OMx2NarRa1Wg2bzUYymVwFWTgcJplM0m638Xg8lEolxuPxWgWisjkUUCIb4uLigsfHR05OThiNRnS7XRKJxC9PUJ+en58JhUI4HA7cbjf5fJ7JZMJwOGRra4v5fA7AaDTi7e1t9Y9rNpvx+voKfIyegI9xDC8vL5yfn68G2Yn8TJckRDZEOp0mFoutimdrtdpvhxOAz+ej3++zXC5ZLBakUilM02R/f5/b21sajQaDwQCfz4ff7+fh4YFqtUo0Gl0VhH6OY+j1emxvb3N3d8fZ2RnX19d/Zc3ytekEJbIhnp6eCAaDTCYTdnZ21n5+b2+PSCSCYRgsl0sMw8DpdALgcrkoFApcXl5Sr9c5PDzEMAxM0yQUCuH1en941+7uLtlslvv7e+x2O5lM5o+sUf4vKosVERFL0ic+ERGxJAWUiIhYkgJKREQsSQElIiKWpIASERFLUkCJiIglKaBERMSSvgNSG8hj9j30pgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = data.reset_index().groupby('sector').ticker.nunique().sort_values().plot.barh(title='Sector Breakdown')\n",
    "ax.set_ylabel('')\n",
    "ax.set_xlabel('# Tickers')\n",
    "sns.despine()\n",
    "plt.tight_layout();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Store data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:32:32.928544Z",
     "start_time": "2020-06-19T13:32:32.900828Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "with pd.HDFStore('data.h5') as store:\n",
    "    store.put('us/equities/monthly', data)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Evaluate mutual information"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:33:03.004457Z",
     "start_time": "2020-06-19T13:33:02.995372Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "X = data.drop('target', axis=1)\n",
    "X.sector = pd.factorize(X.sector)[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:33:29.096296Z",
     "start_time": "2020-06-19T13:33:05.622448Z"
    }
   },
   "outputs": [],
   "source": [
    "mi = mutual_info_regression(X=X, y=data.target)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:33:33.068410Z",
     "start_time": "2020-06-19T13:33:33.056948Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "natr             0.109548\n",
       "return_12m       0.062150\n",
       "return_6m        0.052717\n",
       "year             0.052394\n",
       "return_3m        0.050328\n",
       "momentum_12      0.040728\n",
       "bb_low           0.040695\n",
       "momentum_3_6     0.040362\n",
       "bb_up            0.039736\n",
       "momentum_3_12    0.038936\n",
       "dtype: float64"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mi_reg = pd.Series(mi, index=X.columns)\n",
    "mi_reg.nlargest(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:33:46.557205Z",
     "start_time": "2020-06-19T13:33:37.604336Z"
    }
   },
   "outputs": [],
   "source": [
    "mi = mutual_info_classif(X=X, y=(data.target>0).astype(int))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:33:46.562063Z",
     "start_time": "2020-06-19T13:33:46.558199Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "year          0.012348\n",
       "month         0.008164\n",
       "beta          0.004649\n",
       "return_6m     0.003759\n",
       "natr          0.003493\n",
       "bb_low        0.002781\n",
       "return_12m    0.002617\n",
       "return_1m     0.002310\n",
       "macd          0.001823\n",
       "sector        0.001355\n",
       "dtype: float64"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mi_class = pd.Series(mi, index=X.columns)\n",
    "mi_class.nlargest(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:33:46.574632Z",
     "start_time": "2020-06-19T13:33:46.563169Z"
    }
   },
   "outputs": [],
   "source": [
    "mi = mi_reg.to_frame('Regression').join(mi_class.to_frame('Classification'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:33:51.010413Z",
     "start_time": "2020-06-19T13:33:51.008166Z"
    }
   },
   "outputs": [],
   "source": [
    "mi.index = [' '.join(c.upper().split('_')) for c in mi.index]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-19T13:33:54.249892Z",
     "start_time": "2020-06-19T13:33:53.746322Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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WxcsWGA1m83WK1euWDdu3NhVzbfLjcR45MgR68KFC61Wq9V67Ngx60svvdQlbbdXW/eO3Nxc65NPPmmdMGGC8n50tPuN6DgdmZ8WLFhgPX78uNVqtVp/9atfWf/3f//XIeOYM2eO9W9/+5vVarVaU1NTratWrbppcXR0LFar1fq3v/3NGhkZaQ0NDXXYOOLi4qzp6elWq9Vq/etf/2r95JNPHDKOF154wfrpp59arVarNSYmxpqZmXnT4rjRWKxWq3Xbtm3W6dOn27yHHO16bymOzr7e5RusTvTFF18wceJEAH7+859z5swZZd25c+cYMmQInp6euLi48MADD3Dy5MlW9+mObiTGoKAgXnnlFWW7Hj163PR2X48biREgISGB8PBwbr/99i5pt71uJL5jx45xzz338OKLLxIdHc1///d/d1Hr7XMjMXp7e2M2m7FYLFy5coWePXt2VfPt0ta9o6amhk2bNuHj42P3PkK9OjI/5eXl8eCDDwLw8MMPk52d7ZBxvPXWW9x7770AmM1mevXqddPi6OhYysrKWL9+PUuXLr2pMXR0HF9++SWXLl1i7ty5HDhwQHmfOVoc9957L5cvX8ZqtVJRUXHT88mN/h0zZMgQkpKSbI7laNc7NB9HZ1/vUmB1oitXruDu7q687tGjB3V1dco6Dw8PZZ2bmxtXrlxpdZ/u6EZidHNzw93dnStXrrBw4UIWLVp009t9PW4kxj179nDbbbcpN4Lu7EbiKysr48yZM2zYsIFf//rXLF68GKvVetPbbq8bifGnP/0pRUVFBAcH86tf/cqma0F31Na944EHHsDLy+u69hHq1ZH5yWq14uTkpGz7448/3qQoOjaOhg/DvvzyS1JSUpg7d+7NCeLfOiqWmpoafvnLX7J06VLc3NxuXgD/1pH/T4qKiujduzfvv/8+Xl5ebN++3SHjGDp0KCtXriQ4OJjS0lL8/f1vWhwN7b3eWACmTp3apBh0tOsdmo+js693KbA6kbu7OxUVFcpri8Wi/A++dl1FRQUeHh6t7tMd3UiMAMXFxURGRvL444+j0+lubqOv043EuHv3brKzszEYDJw9e5a4uDi+/fbbm952e9xIfH369OGhhx7CxcUFHx8fevXqxffff3/T226vG4nx/fff56GHHuLw4cPs378fo9FIdXX1TW+7vW7k3uFo9xvRcToyP2k0Gptte/fufRMioNm2tjfPZmRk8MYbb7Bt2zZuu+22mxQFzbb3RmP5+uuvKSgoID4+/v+3cy8hUbZ/GMe/hqmUqZRWmkKZpLboYNMi2oTUQsPs6AHRIChaVKAgSQeQckKzktIIjRY2SUptOioIhWYLD1REKaWWpSFpUFSO5ul5F9G89S/NdxrH5H99ds7MM/d9MfM8v/nd94ykpaXR0tKC2WyedDlcXV3x8fEhMjISgMjISKfusjsyh9lspqSkhIqKCjZu3Eh2drbTcvxqvmP9rPYrk+18H814nu9qsMZRREQE1dXVADx69IhFixbZ7lu4cCGvXr3iw4cP9Pf309DQwPLly0c95m9kT8Z3796xY8cO0tPT2bp160RNfczsyVhSUsKlS5ewWCyEh4eTk5ODn5/fREUYlT35VqxYwb179zAMg7dv39Lb24uPj89ERfgtezJ6eXnZLs7e3t4MDg4yNDQ0IfMfC3uuHZPteiOO48j6tHjxYmprawGorq7GZDJNyhzXrl2zXbeDgoKclsHRWZYsWcKtW7ewWCycOnWKkJAQDh48OOlywNed96qqKgDq6+sJCQmZlDm8vb1tOy+zZ8/m48ePTsthb5aRTLbzfSTjfb67GH/z93omueHhYTIzM3n+/DmGYXDs2DEaGxuxWq3Ex8dz584dzp49i2EYbNmyhaSkpF8es3DhwomOMiJ7MmZlZVFeXv7Db0HOnz+Ph4fHBCYZmT0Zv5ecnExmZuZf+zram+/48ePU1tZiGAapqal/9dch7cnY09PDgQMH6O7uZmBggJSUlL96t/V3Gb/5/v042a434jiOrE8vX77k8OHDDAwMEBwcTFZWltN+W+uoHPPnz2fVqlX4+/vbVuRXrlzJvn37nJLDkVm+P4c7OjpIS0v76T+qTZYcb9684dChQ/T29uLp6cnJkyfx9vaedDkaGho4ceIErq6uTJ06laNHjxIYGOiUHPZm+eZ/30OT7Xz/VY6hoaFxP9/VYImIiIiIiDiIviIoIiIiIiLiIGqwREREREREHEQNloiIiIiIiIOowRIREREREXEQNVgiIiIiIiIOogZLxAlqa2sJDQ3l9u3bP9weExNDRkbGiMd9+fKFK1eu2DVeamrqT7evXr161ONKSkqIjY39aZ6OVlZWxsDAAE1NTRQUFIzrWCIiMjaqVT9SrRJ7qcEScZLg4GBu3rxp+/vZs2f09vaOekx3d7ddRctelZWVHD9+nOjo6HEdp7CwkOHhYcLDw9mzZ8+4jiUiImOnWvUv1Sqxl+tET0Dk/0VYWBhtbW18/PgRLy8vrl+/TkxMDJ2dncDXFbv79+8DkJqaSkJCAjdu3KClpYWCggIMw8DX15fExERaW1vJzMzEYrFQUVFBSUmJbZzTp0//di4ZGRm4ubnx5s0burq6yM7O5smTJzx58oSDBw+Sl5dHZWUlt27dwtXVFZPJRHp6Ovn5+Tx8+BCr1YrZbCYjIwN/f386OjpYv349zc3NNDY2smbNGtLS0qirq7Ot+vX19ZGTk0NDQwPd3d2kpqayfft2SktLycvL4/r16xQXF+Pm5sb8+fM5cuQIN27coKqqir6+Pl6/fs3OnTvZvHnzOLw6IiICqlWqVeII2sEScaJ169ZRWVmJYRg8fvyY5cuXj/r43bt3ExISMurKWVtbG0VFRVgsFhYsWEBNTc2Y5hIQEMCFCxdITk6mrKyM+Ph4wsPDycnJwWq1Ul5eTmlpKaWlpbx69Yq7d+8CX1c3S0tLcXd3p729HbPZTGFhIadPnyYjI4MrV65w9epVAJqbm8nNzeXixYtERkZSUVHBtm3b8PPzIy8vzzaX9+/fk5+fT3FxMZcvX2bGjBmUlZUB8PnzZwoLCzl37hxFRUVjyiYiIvZTrVKtkj+jHSwRJ4qJiSEzM5OgoCBMJtOIjzMMY8zPOWvWLPbv38/06dN58eIFy5YtG9Nx4eHhAMydO5cHDx78cN+LFy9YunQpU6dOBcBkMtHc3AzAggULbI8LCgpixowZuLm54evri4+PDwAuLi4AzJkzB7PZzLRp03j79i0RERG/nEt7ezshISF4enoCsHLlSmpqali6dClhYWEA+Pv709/fP6ZsIiJiP9Uq1Sr5M9rBEnGioKAgrFYrFouFDRs2/HDf4OAgPT099Pf309LSAsCUKVMYHh4GwN3dne7ubgCePn0KwKdPnzhz5gx5eXlkZWXh7u4+5oL3rbD8SnBwMI8fP2ZwcBDDMKivr7cVqylT/r1sjPYcAIcOHeLYsWNkZ2cze/Zs29xcXFxsuQACAwNpbW3FarUCUFdXZxvvd2OIiIhjqVapVsmfUYMl4mTR0dF0dnb+sLoGkJKSQnx8PPv27SMgIAD4uuI3MDBAbm4uUVFRVFVVkZycTFNTEwCenp5ERESwadMmkpKS8PDwoKur64/nGBoaSlRUFImJiWzdupV58+axdu3a//w8sbGxxMXFkZCQQE9Pj21uJpOJXbt22YrYzJkz2bt3LykpKcTFxfH+/XsSExP/OIeIiNhHtUq1SuznYvyX/V0REREREREZkXawREREREREHEQNloiIiIiIiIOowRIREREREXEQNVgiIiIiIiIOogZLRERERETEQdRgiYiIiIiIOIgaLBEREREREQf5B/WipbuT9XUoAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 864x288 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axes = plt.subplots(ncols=2, figsize=(12, 4))\n",
    "for i, t in enumerate(['Regression', 'Classification']):\n",
    "    mi[t].nlargest(20).sort_values().plot.barh(title=t, ax=axes[i])\n",
    "    axes[i].set_xlabel('Mutual Information')\n",
    "fig.suptitle('Mutual Information', fontsize=14)\n",
    "sns.despine()\n",
    "fig.tight_layout()\n",
    "fig.subplots_adjust(top=.9)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": true,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "230.355px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
